designix 0.5.12 → 0.5.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "designix",
3
- "version": "0.5.12",
3
+ "version": "0.5.13",
4
4
  "description": "The first designs made with parametrix",
5
5
  "private": false,
6
6
  "repository": {
@@ -74,6 +74,7 @@
74
74
  },
75
75
  "files": [
76
76
  "dist",
77
+ "!dist/**/*.map",
77
78
  "!dist/**/*.test.*",
78
79
  "!dist/**/*.spec.*"
79
80
  ],
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/gears/gear_wheel_wheel.ts","../src/gears/gearWheelProfile.ts","../src/gears/involute.ts","../src/gears/wheelElements.ts","../src/gears/simplified_gear_wheel.ts","../src/heliostat/heliostat.ts","../src/heliostat/pole_static.ts","../src/heliostat/rake.ts","../src/heliostat/spider.ts","../src/heliostat/swing.ts","../src/heliostat/heliostat_2.ts","../src/heliostat/rake_stopper.ts","../src/heliostat/base.ts","../src/heliostat/pole_rotor.ts","../src/heliostat/rod.ts","../src/heliostat/trapeze.ts","../src/heliostat/surface.ts","../src/dummy/circles.ts","../src/dummy/rectangle.ts","../src/dummy/pole_static.ts","../src/geometrix_verification/verify_point.ts","../src/geometrix_verification/verify_point_2.ts","../src/geometrix_verification/verify_line.ts","../src/geometrix_verification/verify_line_2.ts","../src/geometrix_verification/verify_line_3.ts","../src/geometrix_verification/verify_vector.ts","../src/geometrix_verification/verify_contour_1.ts","../src/geometrix_verification/verify_contour_2.ts","../src/geometrix_verification/verify_contour_3.ts","../src/geometrix_verification/verify_contour_4.ts","../src/geometrix_verification/verify_exports_1.ts"],"sourcesContent":["// gear_wheel_wheel.ts\n\nimport type { tParamDef, tParamVal, tGeom, tPageDef } from 'geometrix';\n//import { contour, contourCircle, figure, degToRad } from 'geometrix';\nimport {\n\tcontour,\n\tfigure,\n\tdegToRad,\n\tffix,\n\tpNumber,\n\tpCheckbox,\n\tpDropdown,\n\tinitGeom,\n\tEExtrude,\n\tEBVolume\n} from 'geometrix';\nimport * as gwHelper from './gearWheelProfile';\nimport * as welem from './wheelElements';\n\nconst pDef: tParamDef = {\n\tpartName: 'gear_wheel_wheel',\n\tparams: [\n\t\t//pNumber(name, unit, init, min, max, step)\n\t\tpNumber('module', 'mm', 10, 0.1, 100, 0.1),\n\t\tpNumber('N1', 'scalar', 23, 3, 1000, 1),\n\t\tpNumber('N2', 'scalar', 19, 3, 1000, 1),\n\t\tpNumber('angleCenterCenter', 'degree', 0, -180, 180, 1),\n\t\tpNumber('addInterAxis', 'mm', 0, 0, 100, 0.05),\n\t\tpNumber('c1x', 'mm', 0, -200, 200, 1),\n\t\tpNumber('c1y', 'mm', 0, -200, 200, 1),\n\t\tpNumber('ah1', 'scalar', 1, 0.1, 2, 0.05),\n\t\tpNumber('dh1', 'scalar', 1, 0.1, 2, 0.05),\n\t\tpNumber('bh1', 'scalar', 0.25, 0.1, 2, 0.05),\n\t\tpNumber('bRound1', 'mm', 2, 0, 50, 0.1),\n\t\tpNumber('ah2', 'scalar', 1, 0.1, 2, 0.05),\n\t\tpNumber('dh2', 'scalar', 1, 0.1, 2, 0.05),\n\t\tpNumber('bh2', 'scalar', 0.25, 0.1, 2, 0.05),\n\t\tpNumber('bRound2', 'mm', 2, 0, 50, 0.1),\n\t\tpNumber('at1', '%', 50, 10, 90, 0.5),\n\t\tpNumber('at2', '%', 50, 10, 90, 0.5),\n\t\tpCheckbox('involSym', true),\n\t\tpDropdown('involROpt', ['Optimum', 'Base-1', 'Base-2', 'PressureAngle', 'FreeBase-12']),\n\t\tpDropdown('involLOpt', ['Optimum', 'Base-1', 'Base-2', 'PressureAngle', 'FreeBase-12']),\n\t\tpNumber('brr1', 'mm', 50, 10, 2000, 0.05),\n\t\tpNumber('brr2', 'mm', 50, 10, 2000, 0.05),\n\t\tpNumber('blr1', 'mm', 50, 10, 2000, 0.05),\n\t\tpNumber('blr2', 'mm', 50, 10, 2000, 0.05),\n\t\tpNumber('involArcPairs1', 'scalar', 2, 1, 40, 1),\n\t\tpNumber('involArcPairs2', 'scalar', 2, 1, 40, 1),\n\t\tpNumber('skinThickness1', 'mm', 0, -3, 3, 0.01),\n\t\tpNumber('skinThickness2', 'mm', 0, -3, 3, 0.01),\n\t\tpNumber('initAngle1', 'degree', 0, -180, 180, 1),\n\t\tpDropdown('gw2Position', ['right', 'left', 'center']),\n\t\tpCheckbox('centralAxis', true),\n\t\tpNumber('axisRadius', 'mm', 10, 0.1, 200, 0.1),\n\t\tpNumber('ribNb', 'scalar', 5, 0, 32, 1),\n\t\tpNumber('ribWidth', 'mm', 8, 1, 100, 0.1),\n\t\tpNumber('ribHeight', 'mm', 8, 1, 100, 0.1),\n\t\tpNumber('ribRound1', 'mm', 2, 0, 20, 0.1),\n\t\tpNumber('ribRound2', 'mm', 2, 0, 20, 0.1),\n\t\tpCheckbox('hollow', true),\n\t\tpNumber('materialHeightExt', 'mm', 20, 1, 200, 0.5),\n\t\tpNumber('materialHeightInt', 'mm', 15, 1, 200, 0.5),\n\t\tpNumber('spokeNb', 'scalar', 5, 1, 18, 1),\n\t\tpNumber('spokeWidth', 'mm', 15, 1, 200, 0.1),\n\t\tpNumber('spokeRound', 'mm', 10, 0, 20, 0.1),\n\t\tpCheckbox('wheelAxis', true),\n\t\tpNumber('wheelHeight', 'mm', 40, 0.1, 400, 0.1),\n\t\tpNumber('wheelMidExtra', 'mm', 6, 0, 10, 0.1),\n\t\tpNumber('wheelAxisLength', 'mm', 40, 0, 400, 0.1),\n\t\tpNumber('wheelAxisRadius', 'mm', 20, 0, 200, 0.1),\n\t\tpNumber('wheelMidRadius', 'mm', 60, 0, 200, 0.1),\n\t\tpNumber('wheelRadiusExtra', 'mm', 1, 0, 20, 0.1),\n\t\tpNumber('wheelAxisExtRound', 'mm', 4, 0, 20, 0.1),\n\t\tpNumber('wheelAxisIntRound', 'mm', 0, 0, 20, 0.1),\n\t\tpNumber('wheelExtraRound', 'mm', 4, 0, 20, 0.1)\n\t],\n\tparamSvg: {\n\t\tmodule: 'default_param_blank.svg',\n\t\tN1: 'default_param_blank.svg',\n\t\tN2: 'default_param_blank.svg',\n\t\tangleCenterCenter: 'default_param_blank.svg',\n\t\taddInterAxis: 'default_param_blank.svg',\n\t\tc1x: 'default_param_blank.svg',\n\t\tc1y: 'default_param_blank.svg',\n\t\tah1: 'default_param_blank.svg',\n\t\tdh1: 'default_param_blank.svg',\n\t\tbh1: 'default_param_blank.svg',\n\t\tbRound1: 'default_param_blank.svg',\n\t\tah2: 'default_param_blank.svg',\n\t\tdh2: 'default_param_blank.svg',\n\t\tbh2: 'default_param_blank.svg',\n\t\tbRound2: 'default_param_blank.svg',\n\t\tat1: 'default_param_blank.svg',\n\t\tat2: 'default_param_blank.svg',\n\t\tinvolSym: 'default_param_blank.svg',\n\t\tinvolROpt: 'default_param_blank.svg',\n\t\tinvolLOpt: 'default_param_blank.svg',\n\t\tbrr1: 'default_param_blank.svg',\n\t\tbrr2: 'default_param_blank.svg',\n\t\tblr1: 'default_param_blank.svg',\n\t\tblr2: 'default_param_blank.svg',\n\t\tinvolArcPairs1: 'default_param_blank.svg',\n\t\tskinThickness1: 'default_param_blank.svg',\n\t\tinvolArcPairs2: 'default_param_blank.svg',\n\t\tskinThickness2: 'default_param_blank.svg',\n\t\tinitAngle1: 'default_param_blank.svg',\n\t\tgw2Position: 'default_param_blank.svg',\n\t\tcentralAxis: 'default_param_blank.svg',\n\t\taxisRadius: 'default_param_blank.svg',\n\t\tribNb: 'default_param_blank.svg',\n\t\tribWidth: 'default_param_blank.svg',\n\t\tribHeight: 'default_param_blank.svg',\n\t\tribRound1: 'default_param_blank.svg',\n\t\tribRound2: 'default_param_blank.svg',\n\t\thollow: 'default_param_blank.svg',\n\t\tmaterialHeightExt: 'default_param_blank.svg',\n\t\tmaterialHeightInt: 'default_param_blank.svg',\n\t\tspokeNb: 'default_param_blank.svg',\n\t\tspokeWidth: 'default_param_blank.svg',\n\t\tspokeRound: 'default_param_blank.svg',\n\t\twheelAxis: 'default_param_blank.svg',\n\t\twheelHeight: 'default_param_blank.svg',\n\t\twheelMidExtra: 'default_param_blank.svg',\n\t\twheelAxisLength: 'default_param_blank.svg',\n\t\twheelAxisRadius: 'default_param_blank.svg',\n\t\twheelMidRadius: 'default_param_blank.svg',\n\t\twheelRadiusExtra: 'default_param_blank.svg',\n\t\twheelAxisExtRound: 'default_param_blank.svg',\n\t\twheelAxisIntRound: 'default_param_blank.svg',\n\t\twheelExtraRound: 'default_param_blank.svg'\n\t},\n\tsim: {\n\t\ttMax: 100,\n\t\ttStep: 0.5,\n\t\ttUpdate: 500 // every 0.5 second\n\t}\n};\n\nfunction pGeom(t: number, param: tParamVal): tGeom {\n\tconst rGeome = initGeom(pDef.partName);\n\tconst figOne = figure();\n\tconst figTwo = figure();\n\trGeome.logstr += `${rGeome.partName} simTime: ${t}\\n`;\n\ttry {\n\t\t// Figure One\n\t\t// re-arrange parameters\n\t\tconst gp1 = gwHelper.gwProfile();\n\t\tconst gp2 = gwHelper.gwProfile();\n\t\tgp1.set1ModuleToothNumber(param.module, param.N1);\n\t\tgp2.set1ModuleToothNumber(param.module, param.N2);\n\t\tgp1.set2CenterPosition(param.c1x, param.c1y);\n\t\tconst acc = degToRad(param.angleCenterCenter);\n\t\tconst [c2x, c2y, d12] = gwHelper.gw2center(gp1, gp2, acc, param.addInterAxis);\n\t\tgp2.set2CenterPosition(c2x, c2y);\n\t\tgp1.set3CircleRadius(param.ah1, param.dh1, param.bh1, param.bRound1);\n\t\tgp2.set3CircleRadius(param.ah2, param.dh2, param.bh2, param.bRound2);\n\t\t// base circles\n\t\tconst [brr1, blr1, brr2, blr2] = gwHelper.baseCircles(\n\t\t\tgp1,\n\t\t\tgp2,\n\t\t\tparam.brr1,\n\t\t\tparam.blr1,\n\t\t\tparam.brr2,\n\t\t\tparam.blr2,\n\t\t\tparam.involSym,\n\t\t\tparam.involROpt,\n\t\t\tparam.involROpt\n\t\t);\n\t\tgp1.set4BaseCircles(brr1, blr1);\n\t\tgp2.set4BaseCircles(brr2, blr2);\n\t\tgp1.set5AddendumThickness(param.at1);\n\t\tgp2.set5AddendumThickness(param.at2);\n\t\tconst initAngle1 = degToRad(param.initAngle1) + (t * 3 * gp1.as) / 100; // sim.tMax=100\n\t\tgp1.set6Angles(initAngle1, acc);\n\t\tconst gearAL = gwHelper.actionLine(gp1, gp2, initAngle1, acc, d12, param.gw2Position);\n\t\tgearAL.prepare();\n\t\tfor (const laCtr of gearAL.getContours()) {\n\t\t\tfigOne.addDynamics(laCtr);\n\t\t}\n\t\tfigOne.addPoints(gearAL.getContactPoint());\n\t\tgp2.set6Angles(gearAL.getInitAngle2(), acc + Math.PI);\n\t\trGeome.logstr += gearAL.getMsg();\n\t\tgp1.set7InvoluteDetails(param.involArcPairs1, param.skinThickness1);\n\t\tgp2.set7InvoluteDetails(param.involArcPairs2, param.skinThickness2);\n\t\t// construction lines and circles\n\t\tfor (const refCircle of gp1.getRefCircles()) {\n\t\t\tfigOne.addDynamics(refCircle);\n\t\t}\n\t\tfor (const refCircle of gp2.getRefCircles()) {\n\t\t\tfigOne.addDynamics(refCircle);\n\t\t}\n\t\tfigOne.addDynamics(gp1.getToothRef());\n\t\tfigOne.addDynamics(gp2.getToothRef());\n\t\t// gearwheel-1\n\t\tconst gp1p = gp1.getProfile();\n\t\trGeome.logstr += gp1.getMsg();\n\t\trGeome.logstr += gp1p.check();\n\t\tfigOne.addMain(gp1p);\n\t\tif (param.centralAxis === 1) {\n\t\t\tconst g1axis = welem.axisTorque(\n\t\t\t\tgp1.cx,\n\t\t\t\tgp1.cy,\n\t\t\t\tparam.axisRadius,\n\t\t\t\tparam.ribNb,\n\t\t\t\tparam.ribWidth,\n\t\t\t\tparam.ribHeight,\n\t\t\t\tparam.ribRound1,\n\t\t\t\tparam.ribRound2,\n\t\t\t\tinitAngle1\n\t\t\t);\n\t\t\trGeome.logstr += g1axis.check();\n\t\t\tfigOne.addMain(g1axis);\n\t\t}\n\t\tif (param.hollow === 1) {\n\t\t\tconst materialHeightExtMax = gp1.br;\n\t\t\tconst materialHeightIntMin = param.axisRadius + param.ribHeight;\n\t\t\tconst hollowMaterialExt = materialHeightExtMax - param.materialHeightExt;\n\t\t\tconst hollowMaterialInt = materialHeightIntMin + param.materialHeightInt;\n\t\t\tif (hollowMaterialInt > hollowMaterialExt) {\n\t\t\t\tthrow `err902: hollowMaterialInt ${ffix(\n\t\t\t\t\thollowMaterialInt\n\t\t\t\t)} bigger than hollowMaterialExt ${ffix(hollowMaterialExt)}`;\n\t\t\t}\n\t\t\tconst g1hollow = welem.hollowStraight(\n\t\t\t\tgp1.cx,\n\t\t\t\tgp1.cy,\n\t\t\t\thollowMaterialExt,\n\t\t\t\thollowMaterialInt,\n\t\t\t\tparam.spokeNb,\n\t\t\t\tparam.spokeWidth,\n\t\t\t\tparam.spokeRound,\n\t\t\t\tinitAngle1\n\t\t\t);\n\t\t\tfor (const g1hollowE of g1hollow) {\n\t\t\t\trGeome.logstr += g1hollowE.check();\n\t\t\t\tfigOne.addMain(g1hollowE);\n\t\t\t}\n\t\t}\n\t\tconst gp2p = gp2.getProfile();\n\t\trGeome.logstr += gp2p.check();\n\t\tfigOne.addSecond(gp2p);\n\t\t// Figure Two\n\t\tconst wheelRadius = gp1.ar + param.wheelRadiusExtra;\n\t\tif (param.wheelAxis === 1) {\n\t\t\tconst ctrAxisProfile_right = welem.axisProfile(\n\t\t\t\tparam.wheelHeight,\n\t\t\t\tparam.wheelMidExtra,\n\t\t\t\tparam.wheelAxisLength,\n\t\t\t\tparam.wheelAxisRadius,\n\t\t\t\tparam.wheelMidRadius,\n\t\t\t\twheelRadius,\n\t\t\t\tparam.wheelAxisExtRound,\n\t\t\t\tparam.wheelAxisIntRound,\n\t\t\t\tparam.wheelExtraRound,\n\t\t\t\ttrue\n\t\t\t);\n\t\t\tconst ctrAxisProfile_left = welem.axisProfile(\n\t\t\t\tparam.wheelHeight,\n\t\t\t\tparam.wheelMidExtra,\n\t\t\t\tparam.wheelAxisLength,\n\t\t\t\tparam.wheelAxisRadius,\n\t\t\t\tparam.wheelMidRadius,\n\t\t\t\twheelRadius,\n\t\t\t\tparam.wheelAxisExtRound,\n\t\t\t\tparam.wheelAxisIntRound,\n\t\t\t\tparam.wheelExtraRound,\n\t\t\t\tfalse\n\t\t\t);\n\t\t\tfigTwo.addMain(ctrAxisProfile_right);\n\t\t\tfigTwo.addSecond(ctrAxisProfile_left);\n\t\t} else {\n\t\t\tconst ctrAxisProfile_right = contour(0, -param.wheelHeight / 2)\n\t\t\t\t.addSegStrokeR(0, param.wheelHeight)\n\t\t\t\t.addSegStrokeR(wheelRadius, 0)\n\t\t\t\t.addSegStrokeR(0, -param.wheelHeight)\n\t\t\t\t.closeSegStroke();\n\t\t\tconst ctrAxisProfile_left = contour(0, -param.wheelHeight / 2)\n\t\t\t\t.addSegStrokeR(0, param.wheelHeight)\n\t\t\t\t.addSegStrokeR(-wheelRadius, 0)\n\t\t\t\t.addSegStrokeR(0, -param.wheelHeight)\n\t\t\t\t.closeSegStroke();\n\t\t\tfigTwo.addMain(ctrAxisProfile_right);\n\t\t\tfigTwo.addSecond(ctrAxisProfile_left);\n\t\t}\n\t\trGeome.fig = { teethProfile: figOne, axisProfile: figTwo };\n\t\tconst designName = rGeome.partName;\n\t\tconst axisHLength =\n\t\t\tparam.wheelHeight / 2 + param.wheelMidExtra + param.wheelAxisLength + 10;\n\t\trGeome.vol = {\n\t\t\textrudes: [\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_teethProfile`,\n\t\t\t\t\tface: `${designName}_teethProfile`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: 2 * axisHLength,\n\t\t\t\t\trotate: [0, 0, 0],\n\t\t\t\t\ttranslate: [0, 0, -axisHLength]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_axisProfile`,\n\t\t\t\t\tface: `${designName}_axisProfile`,\n\t\t\t\t\textrudeMethod: EExtrude.eRotate,\n\t\t\t\t\trotate: [0, 0, 0],\n\t\t\t\t\ttranslate: [0, 0, 0]\n\t\t\t\t}\n\t\t\t],\n\t\t\tvolumes: [\n\t\t\t\t{\n\t\t\t\t\toutName: `pax_${designName}`,\n\t\t\t\t\tboolMethod: EBVolume.eIntersection,\n\t\t\t\t\tinList: [\n\t\t\t\t\t\t`subpax_${designName}_teethProfile`,\n\t\t\t\t\t\t`subpax_${designName}_axisProfile`\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t\trGeome.logstr += 'gear_wheel_wheel draw successfully!\\n';\n\t\trGeome.calcErr = false;\n\t} catch (emsg) {\n\t\trGeome.logstr += emsg as string;\n\t\tconsole.log(emsg as string);\n\t}\n\treturn rGeome;\n}\n\nconst gearWheelWheelDef: tPageDef = {\n\tpTitle: 'Gearwheel-gearwheel',\n\tpDescription: 'Gear-system with two wheels',\n\tpDef: pDef,\n\tpGeom: pGeom\n};\n\nexport { gearWheelWheelDef };\n","// gearWheelProfile.ts\n\nimport type { Point, tContour } from 'geometrix';\nimport {\n\tcontour,\n\tcontourCircle,\n\tpoint,\n\tShapePoint,\n\tlcFromLaLbAc,\n\taBFromLaLbAa,\n\twithinZero2Pi,\n\twithinPiPi,\n\tradToDeg,\n\troundZero,\n\tffix\n} from 'geometrix';\nimport type { Involute } from './involute';\nimport { involute } from './involute';\n\nclass GearWheelProfile {\n\tmod = 1;\n\tTN = 23;\n\tas = 1;\n\tcx = 0;\n\tcy = 0;\n\tbrr = 50;\n\tblr = 50;\n\tar = 54;\n\tpr = 53;\n\tdr = 52;\n\tbr = 51;\n\tbRound = 1;\n\tadt = 0.5;\n\tinitAngle = 0;\n\taxisAngle = 0;\n\tinvolArcPairs = 1;\n\tskinThickness = 0;\n\tinvoluteR = involute(0, 0, 50, 0, true);\n\tinvoluteL = involute(0, 0, 50, 0, false);\n\trud = 0;\n\trup = 0;\n\trua = 0;\n\trwd = 0;\n\trwp = 0;\n\trwa = 0;\n\tlud = 0;\n\tlup = 0;\n\tlua = 0;\n\tlwd = 0;\n\tlwp = 0;\n\tlwa = 0;\n\tmsg: string;\n\tinitStep = 0;\n\tconstructor() {\n\t\tthis.mod = 1;\n\t\tthis.msg = '';\n\t\tthis.initStep = 0;\n\t}\n\tincInitStep(target: number) {\n\t\tif (this.initStep + 1 !== target) {\n\t\t\tthrow `err834: incInitStep initStep ${this.initStep} and target ${target} are not compatible`;\n\t\t}\n\t\tthis.initStep = target;\n\t}\n\tcheckInitStep(targetMin: number, msg: string) {\n\t\tif (this.initStep < targetMin) {\n\t\t\tthrow `err835: checkInitStep for ${msg} initStep ${this.initStep} is too small compare to targetMin ${targetMin}`;\n\t\t}\n\t}\n\tset1ModuleToothNumber(iMod: number, iTN: number) {\n\t\tthis.incInitStep(1);\n\t\tthis.mod = iMod;\n\t\tthis.TN = iTN;\n\t\tthis.pr = (this.mod * this.TN) / 2;\n\t\tthis.as = (2 * Math.PI) / this.TN;\n\t}\n\tset2CenterPosition(icx: number, icy: number) {\n\t\tthis.incInitStep(2);\n\t\tthis.cx = icx;\n\t\tthis.cy = icy;\n\t}\n\tset3CircleRadius(iah: number, idh: number, ibh: number, ibRound: number) {\n\t\tthis.incInitStep(3);\n\t\tthis.ar = this.pr + this.mod * iah;\n\t\tthis.dr = this.pr - this.mod * idh;\n\t\tthis.br = this.dr - this.mod * ibh;\n\t\tthis.bRound = ibRound;\n\t}\n\tset4BaseCircles(baseRight: number, baseLeft: number) {\n\t\tthis.incInitStep(4);\n\t\tthis.brr = baseRight;\n\t\tthis.blr = baseLeft;\n\t}\n\tset5AddendumThickness(iat: number) {\n\t\tthis.incInitStep(5);\n\t\tthis.adt = iat / 100;\n\t}\n\tset6Angles(initAng: number, axisAng: number) {\n\t\tthis.incInitStep(6);\n\t\tthis.initAngle = initAng;\n\t\tthis.axisAngle = axisAng;\n\t}\n\tset7InvoluteDetails(iInvolArcPairs: number, iSkinThickness: number) {\n\t\tthis.incInitStep(7);\n\t\tthis.involArcPairs = iInvolArcPairs;\n\t\tthis.skinThickness = iSkinThickness;\n\t}\n\tgetRefCircles(): tContour[] {\n\t\tthis.checkInitStep(4, 'getRefCircles');\n\t\tconst rRefCircles = [\n\t\t\tcontourCircle(this.cx, this.cy, this.ar, 'Azure'),\n\t\t\tcontourCircle(this.cx, this.cy, this.pr, 'Azure'),\n\t\t\tcontourCircle(this.cx, this.cy, this.dr, 'Azure'),\n\t\t\tcontourCircle(this.cx, this.cy, this.br, 'Azure'),\n\t\t\tcontourCircle(this.cx, this.cy, this.brr, 'CornFlowerBlue'),\n\t\t\tcontourCircle(this.cx, this.cy, this.blr, 'Crimson')\n\t\t];\n\t\treturn rRefCircles;\n\t}\n\tcalcInvoluteAngles() {\n\t\tthis.checkInitStep(4, 'calcInvoluteAngles');\n\t\tthis.involuteR = involute(this.cx, this.cy, this.brr, 0, true);\n\t\tif (this.dr > this.brr) {\n\t\t\tthis.rud = this.involuteR.uFromL(this.dr);\n\t\t} else {\n\t\t\tthis.rud = 0;\n\t\t}\n\t\tthis.rup = this.involuteR.uFromL(this.pr);\n\t\tthis.rua = this.involuteR.uFromL(this.ar);\n\t\tthis.rwd = this.involuteR.wFromU(this.rud);\n\t\tthis.rwp = this.involuteR.wFromU(this.rup);\n\t\tthis.rwa = this.involuteR.wFromU(this.rua);\n\t\tthis.involuteL = involute(this.cx, this.cy, this.blr, 0, false);\n\t\tif (this.dr > this.blr) {\n\t\t\tthis.lud = this.involuteL.uFromL(this.dr);\n\t\t} else {\n\t\t\tthis.rud = 0;\n\t\t}\n\t\tthis.lup = this.involuteL.uFromL(this.pr);\n\t\tthis.lua = this.involuteL.uFromL(this.ar);\n\t\tthis.lwd = this.involuteL.wFromU(this.lud);\n\t\tthis.lwp = this.involuteL.wFromU(this.lup);\n\t\tthis.lwa = this.involuteL.wFromU(this.lua);\n\t}\n\tcheckProfileConditions() {\n\t\tconst aas = this.as * this.adt;\n\t\tconst rwpa = this.rwa - this.rwp;\n\t\tconst lwpa = Math.abs(this.lwa - this.lwp);\n\t\t//this.msg += `dbg10_: rwa ${ffix(this.rwa)} rwp ${ffix(this.rwp)}\\n`;\n\t\t//this.msg += `dbg109: lwa ${ffix(this.lwa)} lwp ${ffix(this.lwp)}\\n`;\n\t\t//this.msg += `dbg110: aas ${ffix(aas)} rwpa ${ffix(rwpa)} lwpa ${ffix(lwpa)}\\n`;\n\t\tconst aAddendum = aas - rwpa - lwpa;\n\t\tif (aAddendum < 0) {\n\t\t\tthrow `err554: No remaining Addendum reserve ${ffix(aAddendum)}\\n`;\n\t\t}\n\t\tconst ads = this.as * (1 - this.adt);\n\t\tconst rwpd = this.rwp - this.rwd;\n\t\tconst lwpd = Math.abs(this.lwp - this.lwd);\n\t\tconst aDedendum = ads - rwpd - lwpd;\n\t\tif (aDedendum < 2 * Math.atan2(this.bRound, this.br)) {\n\t\t\tthrow `err555: No remaining Dedendum reserve ${ffix(\n\t\t\t\taDedendum\n\t\t\t)} compare to bRound ${ffix(this.bRound)}\\n`;\n\t\t}\n\t}\n\tgetToothRef(): tContour {\n\t\tconst ptnb = 6 * this.involArcPairs;\n\t\tconst toothID = 0;\n\t\tthis.checkInitStep(7, 'getProfile');\n\t\tthis.calcInvoluteAngles();\n\t\tconst uPeriodR = (this.rua - this.rud) / ptnb;\n\t\tconst uPeriodL = (this.lua - this.lud) / ptnb;\n\t\tconst refA = this.initAngle + toothID * this.as;\n\t\tconst invoR = involute(this.cx, this.cy, this.brr, refA - this.rwp, true);\n\t\tconst [p1x, p1y] = invoR.ptc(this.rud + 0 * uPeriodR);\n\t\tconst rCtr = contour(p1x, p1y, 'Gold');\n\t\tfor (let j = 0; j < ptnb; j++) {\n\t\t\tconst [px, py] = invoR.ptc(this.rud + (j + 1) * uPeriodR);\n\t\t\trCtr.addSegStrokeA(px, py);\n\t\t}\n\t\tconst refAl = refA + this.as * this.adt;\n\t\tconst invoL = involute(this.cx, this.cy, this.blr, refAl - this.lwp, false);\n\t\tfor (let j = 0; j < ptnb + 1; j++) {\n\t\t\tconst [px, py] = invoL.ptc(this.lud + (ptnb - j) * uPeriodL);\n\t\t\trCtr.addSegStrokeA(px, py);\n\t\t}\n\t\trCtr.closeSegStroke();\n\t\treturn rCtr;\n\t}\n\tgetProfile(): tContour {\n\t\tthis.checkInitStep(7, 'getProfile');\n\t\tthis.calcInvoluteAngles();\n\t\tthis.checkProfileConditions();\n\t\tconst aDiffRd = this.rwd - this.rwp;\n\t\t//const aDiffRa = this.rwa - this.rwp;\n\t\tconst aDiffLd = this.lwd - this.lwp;\n\t\t//const aDiffLa = this.lwa - this.lwp;\n\t\tconst erdr = this.dr > this.brr ? this.dr : this.brr;\n\t\tconst eldr = this.dr > this.blr ? this.dr : this.blr;\n\t\tif (this.bRound > erdr - this.br) {\n\t\t\tthrow `err409: getProfile bRound ${ffix(this.bRound)} too large for erdr ${ffix(\n\t\t\t\terdr\n\t\t\t)} and br ${ffix(this.br)}`;\n\t\t}\n\t\tif (this.bRound > eldr - this.br) {\n\t\t\tthrow `err408: getProfile bRound ${ffix(this.bRound)} too large for eldr ${ffix(\n\t\t\t\teldr\n\t\t\t)} and br ${ffix(this.br)}`;\n\t\t}\n\t\tconst uPeriodR = (this.rua - this.rud) / this.involArcPairs;\n\t\tconst uPeriodL = (this.lua - this.lud) / this.involArcPairs;\n\t\tconst center = point(this.cx, this.cy);\n\t\t// this first point is equal to the first stroke of the loop.\n\t\t// Contour will remove it because last and new points are identical\n\t\tconst first = center.translatePolar(this.initAngle + aDiffRd, this.br);\n\t\tconst rProfile = contour(first.cx, first.cy);\n\t\tfor (let i = 0; i < this.TN; i++) {\n\t\t\tconst refA = this.initAngle + i * this.as;\n\t\t\tconst ptrb = center.translatePolar(refA + aDiffRd, this.br);\n\t\t\trProfile.addSegStrokeA(ptrb.cx, ptrb.cy).addCornerRounded(this.bRound);\n\t\t\tconst invoR = involute(this.cx, this.cy, this.brr, refA - this.rwp, true);\n\t\t\t//const ptrd = center.translatePolar(refA + aDiffRd, erdr);\n\t\t\tconst [px1, py1] = invoR.ptc(this.rud);\n\t\t\tconst ta11 = invoR.ptcta(this.rud);\n\t\t\tconst ptrd = point(px1, py1).translatePolar(ta11 - Math.PI / 2, this.skinThickness);\n\t\t\trProfile.addSegStrokeA(ptrd.cx, ptrd.cy);\n\t\t\t//const ptrp = center.translatePolar(refA, this.pr);\n\t\t\t//rProfile.addSegStrokeA(ptrp.cx, ptrp.cy);\n\t\t\t//const ptra = center.translatePolar(refA + aDiffRa, this.ar);\n\t\t\t//rProfile.addSegStrokeA(ptra.cx, ptra.cy);\n\t\t\tfor (let j = 0; j < this.involArcPairs; j++) {\n\t\t\t\tconst uu1 = this.rud + j * uPeriodR;\n\t\t\t\tconst [px, py] = invoR.ptc(uu1 + uPeriodR);\n\t\t\t\tconst ta1 = invoR.ptcta(uu1);\n\t\t\t\tconst ta2 = invoR.ptcta(uu1 + uPeriodR) + Math.PI;\n\t\t\t\tconst pn = point(px, py).translatePolar(ta1 - Math.PI / 2, this.skinThickness);\n\t\t\t\t//rProfile.addSegStrokeA(px, py);\n\t\t\t\trProfile.addPointA(pn.cx, pn.cy).addSeg2Arcs(ta1, ta2);\n\t\t\t}\n\t\t\tconst refAl = refA + this.as * this.adt;\n\t\t\tconst invoL = involute(this.cx, this.cy, this.blr, refAl - this.lwp, false);\n\t\t\t//const ptla = center.translatePolar(refAl + aDiffLa, this.ar);\n\t\t\tconst uu2 = this.lud + this.involArcPairs * uPeriodL;\n\t\t\tconst [px2, py2] = invoL.ptc(uu2);\n\t\t\tconst ta12 = invoL.ptcta(uu2) + Math.PI;\n\t\t\tconst ptla = point(px2, py2).translatePolar(ta12 - Math.PI / 2, this.skinThickness);\n\t\t\trProfile.addSegStrokeA(ptla.cx, ptla.cy);\n\t\t\t//const ptlp = center.translatePolar(refAl, this.pr);\n\t\t\t//rProfile.addSegStrokeA(ptlp.cx, ptlp.cy);\n\t\t\t//const ptld = center.translatePolar(refAl + aDiffLd, eldr);\n\t\t\t//rProfile.addSegStrokeA(ptld.cx, ptld.cy);\n\t\t\tfor (let j = 0; j < this.involArcPairs; j++) {\n\t\t\t\tconst uu1 = this.lud + (this.involArcPairs - j) * uPeriodL;\n\t\t\t\tconst [px, py] = invoL.ptc(uu1 - uPeriodL);\n\t\t\t\tconst ta1 = invoL.ptcta(uu1) + Math.PI;\n\t\t\t\tconst ta2 = invoL.ptcta(uu1 - uPeriodL);\n\t\t\t\tconst pn = point(px, py).translatePolar(ta1 - Math.PI / 2, this.skinThickness);\n\t\t\t\t//rProfile.addSegStrokeA(px, py);\n\t\t\t\trProfile.addPointA(pn.cx, pn.cy).addSeg2Arcs(ta1, ta2);\n\t\t\t}\n\t\t\tconst ptlb = center.translatePolar(refAl + aDiffLd, this.br);\n\t\t\trProfile.addSegStrokeA(ptlb.cx, ptlb.cy).addCornerRounded(this.bRound);\n\t\t}\n\t\trProfile.closeSegStroke();\n\t\treturn rProfile;\n\t}\n\tgetMsg(): string {\n\t\treturn this.msg;\n\t}\n}\n\nfunction gwProfile(): GearWheelProfile {\n\tconst rgwp = new GearWheelProfile();\n\treturn rgwp;\n}\n\nenum EInvolOpt {\n\tOptimum = 0,\n\tBaseCircle1,\n\tBaseCircle2,\n\tPressionAngle,\n\tDisfunctioningTwoCircles\n}\n\n// helper functions\nfunction gw2center(\n\tgw1: GearWheelProfile,\n\tgw2: GearWheelProfile,\n\tangleCenterCenter: number,\n\taddInterAxis: number\n): number[] {\n\tgw1.checkInitStep(1, 'helper.gw2center-1');\n\tgw2.checkInitStep(1, 'helper.gw2center-2');\n\tconst interAxis = gw1.pr + gw2.pr + addInterAxis;\n\tconst c2x = gw1.cx + interAxis * Math.cos(angleCenterCenter);\n\tconst c2y = gw1.cy + interAxis * Math.sin(angleCenterCenter);\n\treturn [c2x, c2y, interAxis];\n}\nfunction baseCircles(\n\tgw1: GearWheelProfile,\n\tgw2: GearWheelProfile,\n\tibrr1: number,\n\tiblr1: number,\n\tibrr2: number,\n\tiblr2: number,\n\tinvolSym: number,\n\tinvolROpt: number,\n\tinvolLOpt: number\n): number[] {\n\tgw1.checkInitStep(3, 'helper.baseCircles-1');\n\tgw2.checkInitStep(3, 'helper.baseCircles-2');\n\tlet brr1 = ibrr1;\n\tlet brr2 = ibrr2;\n\tlet blr1 = iblr1;\n\tlet blr2 = iblr2;\n\tconst involROpt2: EInvolOpt = involROpt as EInvolOpt;\n\tconst involLOpt2: EInvolOpt = involLOpt as EInvolOpt;\n\tif (involROpt2 === EInvolOpt.Optimum) {\n\t\tif (gw2.TN > gw1.TN) {\n\t\t\tbrr1 = gw1.dr;\n\t\t\tbrr2 = (brr1 * gw2.TN) / gw1.TN;\n\t\t} else {\n\t\t\tbrr2 = gw2.dr;\n\t\t\tbrr1 = (brr2 * gw1.TN) / gw2.TN;\n\t\t}\n\t}\n\tif (involLOpt2 === EInvolOpt.Optimum) {\n\t\tif (gw2.TN > gw1.TN) {\n\t\t\tblr1 = gw1.dr;\n\t\t\tblr2 = (blr1 * gw2.TN) / gw1.TN;\n\t\t} else {\n\t\t\tblr2 = gw2.dr;\n\t\t\tblr1 = (blr2 * gw1.TN) / gw2.TN;\n\t\t}\n\t}\n\tif (involSym === 1) {\n\t\tblr1 = brr1;\n\t\tblr2 = brr2;\n\t}\n\treturn [brr1, blr1, brr2, blr2];\n}\n\nclass ActionLine {\n\tgw1: GearWheelProfile;\n\tgw2: GearWheelProfile;\n\tinitAngle1: number;\n\tangleCenterCenter: number;\n\tinterAxis: number;\n\trightLeftCenter2: number;\n\tmsg: string;\n\tapr: number; // angle pressure right\n\tapl: number; // angle pressure left\n\tlBDr = 0;\n\tlBDl = 0;\n\tlaStartRr1 = 0;\n\tlaStartRr2 = 0;\n\tlaStartRl1 = 0;\n\tlaStartRl2 = 0;\n\taFODr1 = 0;\n\taFODr2 = 0;\n\taFODl1 = 0;\n\taFODl2 = 0;\n\tlasr1 = 0;\n\tlasr2 = 0;\n\tlasl1 = 0;\n\tlasl2 = 0;\n\tfirstToothUr1 = 0;\n\tfirstToothUl1 = 0;\n\tftdr1 = 0;\n\tftdl1 = 0;\n\tconstructor(\n\t\tgw1: GearWheelProfile,\n\t\tgw2: GearWheelProfile,\n\t\tinitAngle1: number,\n\t\tangleCenterCenter: number,\n\t\tinterAxis: number,\n\t\trightLeftCenter2: number\n\t) {\n\t\t// initialized members\n\t\tthis.gw1 = gw1;\n\t\tthis.gw2 = gw2;\n\t\tthis.initAngle1 = initAngle1;\n\t\tthis.angleCenterCenter = angleCenterCenter;\n\t\tthis.interAxis = interAxis;\n\t\tthis.rightLeftCenter2 = rightLeftCenter2;\n\t\t// computed members\n\t\tthis.msg = '';\n\t\tthis.apr = 0;\n\t\tthis.apl = 0;\n\t}\n\tcheck1() {\n\t\tthis.gw1.checkInitStep(4, 'ActionLine.check1-1');\n\t\tthis.gw2.checkInitStep(4, 'ActionLine.check1-2');\n\t\tif (this.interAxis > this.gw1.ar + this.gw2.ar) {\n\t\t\tthis.msg += `warn333: initAngle2 interAxis ${ffix(\n\t\t\t\tthis.interAxis\n\t\t\t)} is too large compare to gw1.ar ${ffix(this.gw1.ar)} and gw2.ar ${ffix(\n\t\t\t\tthis.gw2.ar\n\t\t\t)}\\n`;\n\t\t}\n\t\tif (roundZero(this.gw1.brr * this.gw2.TN - this.gw2.brr * this.gw1.TN) !== 0) {\n\t\t\tthis.msg += `warn407: right ratios differ N1/N2 = ${this.gw1.TN} / ${\n\t\t\t\tthis.gw2.TN\n\t\t\t} = ${ffix(this.gw1.TN / this.gw2.TN)} and brr1/brr2 = ${ffix(this.gw1.brr)}/${ffix(\n\t\t\t\tthis.gw2.brr\n\t\t\t)} = ${ffix(this.gw1.brr / this.gw2.brr)}\\n`;\n\t\t}\n\t\tif (roundZero(this.gw1.blr * this.gw2.TN - this.gw2.blr * this.gw1.TN) !== 0) {\n\t\t\tthis.msg += `warn408: left ratios differ N1/N2 = ${this.gw1.TN} / ${\n\t\t\t\tthis.gw2.TN\n\t\t\t} = ${ffix(this.gw1.TN / this.gw2.TN)} and blr1/blr2 = ${ffix(this.gw1.blr)}/${ffix(\n\t\t\t\tthis.gw2.blr\n\t\t\t)} = ${ffix(this.gw1.blr / this.gw2.blr)}\\n`;\n\t\t}\n\t}\n\tcheck2() {\n\t\tthis.gw1.checkInitStep(5, 'ActionLine.check2-1');\n\t\tthis.gw2.checkInitStep(5, 'ActionLine.check2-2');\n\t\tif (roundZero(this.gw1.adt + this.gw2.adt - 1) > 0) {\n\t\t\tthis.msg += `warn281: addendum thickness too large: adt1 ${ffix(\n\t\t\t\tthis.gw1.adt\n\t\t\t)} adt2 ${ffix(this.gw2.adt)}\\n`;\n\t\t}\n\t\tconst a1 = this.gw1.ar - this.gw1.pr;\n\t\tconst d1 = this.gw1.pr - this.gw1.dr;\n\t\tconst a2 = this.gw2.ar - this.gw2.pr;\n\t\tconst d2 = this.gw2.pr - this.gw2.dr;\n\t\tif (roundZero(d2 - a1) < 0) {\n\t\t\tthis.msg += `warn282: addendum-1 ${ffix(a1)} larger than dedendum-2 ${ffix(d2)}\\n`;\n\t\t}\n\t\tif (roundZero(d1 - a2) < 0) {\n\t\t\tthis.msg += `warn283: addendum-2 ${ffix(a2)} larger than dedendum-1 ${ffix(d1)}\\n`;\n\t\t}\n\t}\n\tcalcActionLine() {\n\t\tthis.gw1.checkInitStep(4, 'ActionLine.calcActionLine-1');\n\t\tthis.gw2.checkInitStep(4, 'ActionLine.calcActionLine-2');\n\t\tthis.gw1.calcInvoluteAngles();\n\t\tthis.gw2.calcInvoluteAngles();\n\t\tconst dOFr1 = (this.interAxis * this.gw1.brr) / (this.gw1.brr + this.gw2.brr);\n\t\tconst dOFl1 = (this.interAxis * this.gw1.blr) / (this.gw1.blr + this.gw2.blr);\n\t\tconst dOFr2 = this.interAxis - dOFr1;\n\t\tconst dOFl2 = this.interAxis - dOFl1;\n\t\t//const apr = Math.acos(gw1.brr / dOFr);\n\t\t//const apl = Math.acos(gw1.blr / dOFl);\n\t\tthis.apr = Math.acos((this.gw1.brr + this.gw2.brr) / this.interAxis);\n\t\tthis.apl = Math.acos((this.gw1.blr + this.gw2.blr) / this.interAxis);\n\t\tthis.msg += `Pressure angular: right: ${ffix(radToDeg(this.apr))} left: ${ffix(\n\t\t\tradToDeg(this.apl)\n\t\t)} degree\\n`;\n\t\tthis.lBDr = this.interAxis * Math.sin(this.apr);\n\t\tthis.lBDl = this.interAxis * Math.sin(this.apl);\n\t\tthis.msg += `Line of Action Maximum length: right: ${ffix(this.lBDr)} left: ${ffix(\n\t\t\tthis.lBDl\n\t\t)} mm\\n`;\n\t\t// effective line of action right\n\t\tconst aOFDr1 = Math.PI / 2 + this.apr;\n\t\tconst aFDOr1 = aBFromLaLbAa(this.gw1.ar, dOFr1, aOFDr1);\n\t\tthis.aFODr1 = Math.PI - aOFDr1 - aFDOr1;\n\t\t//const aBODr1 = this.gw1.involuteR.uFromL(this.gw1.ar); // this.gw1.rua\n\t\tconst aFODr1Alt = this.gw1.rua - this.apr - this.gw1.rwa;\n\t\t//this.aFODr1 = aFODr1Alt;\n\t\tif (roundZero(this.aFODr1 - aFODr1Alt) !== 0) {\n\t\t\tthrow `dbg378: aFODr1 ${this.aFODr1} and aFODr1Alt ${aFODr1Alt} differ`;\n\t\t}\n\t\tconst lDFr1 = lcFromLaLbAc(dOFr1, this.gw1.ar, this.aFODr1);\n\t\tconst aOFDr2 = aOFDr1;\n\t\tconst aFDOr2 = aBFromLaLbAa(this.gw2.ar, dOFr2, aOFDr2);\n\t\tthis.aFODr2 = Math.PI - aOFDr2 - aFDOr2;\n\t\tconst aFODr2Alt = this.gw2.rua - this.apr - this.gw2.rwa;\n\t\t//this.aFODr2 = aFODr2Alt;\n\t\tif (roundZero(this.aFODr2 - aFODr2Alt) !== 0) {\n\t\t\tthrow `dbg379: aFODr2 ${this.aFODr2} and aFODr2Alt ${aFODr2Alt} differ`;\n\t\t}\n\t\tconst lDFr2 = lcFromLaLbAc(dOFr2, this.gw2.ar, this.aFODr2);\n\t\tconst lalr = lDFr1 + lDFr2;\n\t\tconst laUr1 = lalr / this.gw1.brr;\n\t\tconst laUr2 = lalr / this.gw2.brr;\n\t\tconst laStartUr1 = this.gw1.rua - laUr1;\n\t\tconst laStartUr2 = this.gw2.rua - laUr2;\n\t\tthis.laStartRr1 = this.gw1.involuteR.lFromU(laStartUr1);\n\t\tthis.laStartRr2 = this.gw2.involuteR.lFromU(laStartUr2);\n\t\t// effective line of action left\n\t\tconst aOFDl1 = Math.PI / 2 + this.apl;\n\t\tconst aFDOl1 = aBFromLaLbAa(this.gw1.ar, dOFl1, aOFDl1);\n\t\tthis.aFODl1 = Math.PI - aOFDl1 - aFDOl1;\n\t\tconst aFODl1Alt = this.gw1.lua - this.apl + this.gw1.lwa;\n\t\t//this.aFODl1 = aFODl1Alt;\n\t\tif (roundZero(this.aFODl1 - aFODl1Alt) !== 0) {\n\t\t\tthrow `dbg388: aFODl1 ${this.aFODl1} and aFODl1Alt ${aFODl1Alt} differ`;\n\t\t}\n\t\tconst lDFl1 = lcFromLaLbAc(dOFl1, this.gw1.ar, this.aFODl1);\n\t\tconst aOFDl2 = aOFDr1;\n\t\tconst aFDOl2 = aBFromLaLbAa(this.gw2.ar, dOFl2, aOFDl2);\n\t\tthis.aFODl2 = Math.PI - aOFDl2 - aFDOl2;\n\t\tconst aFODl2Alt = this.gw2.lua - this.apl + this.gw2.lwa;\n\t\t//this.aFODl2 = aFODl2Alt;\n\t\tif (roundZero(this.aFODl2 - aFODl2Alt) !== 0) {\n\t\t\tthrow `dbg389: aFODl2 ${this.aFODl2} and aFODl2Alt ${aFODl2Alt} differ`;\n\t\t}\n\t\tconst lDFl2 = lcFromLaLbAc(dOFl2, this.gw2.ar, this.aFODl2);\n\t\tconst lall = lDFl1 + lDFl2;\n\t\tconst laUl1 = lall / this.gw1.blr;\n\t\tconst laUl2 = lall / this.gw2.blr;\n\t\tconst laStartUl1 = this.gw1.lua - laUl1;\n\t\tconst laStartUl2 = this.gw2.lua - laUl2;\n\t\tthis.laStartRl1 = this.gw1.involuteL.lFromU(laStartUl1);\n\t\tthis.laStartRl2 = this.gw2.involuteL.lFromU(laStartUl2);\n\t\tthis.msg += `Line of Action Effective length: right: ${ffix(lalr)} left: ${ffix(\n\t\t\tlall\n\t\t)} mm\\n`;\n\t\tthis.msg += `Line of Action Effective rotation angle: right-1: ${ffix(\n\t\t\tradToDeg(laUr1)\n\t\t)} right-2: ${ffix(radToDeg(laUr2))} left-1: ${ffix(radToDeg(laUl1))} left-2: ${ffix(\n\t\t\tradToDeg(laUl2)\n\t\t)} degree\\n`;\n\t\tthis.msg += `Line of Action Effective height: right-1: ${ffix(\n\t\t\tthis.gw1.ar - this.laStartRr1\n\t\t)} right-2: ${ffix(this.gw2.ar - this.laStartRr2)} left-1: ${ffix(\n\t\t\tthis.gw1.ar - this.laStartRl1\n\t\t)} left-2: ${ffix(this.gw2.ar - this.laStartRl2)} mm\\n`;\n\t\tthis.lasr1 = ((2 * Math.PI) / this.gw1.TN) * this.gw1.brr;\n\t\tthis.lasr2 = ((2 * Math.PI) / this.gw2.TN) * this.gw2.brr;\n\t\tthis.msg += `Line of Action right: step length: 1: ${ffix(this.lasr1)} 2: ${ffix(\n\t\t\tthis.lasr2\n\t\t)} mm\\n`;\n\t\tthis.msg += `Line of Action right: nb of contact point: 1: ${ffix(\n\t\t\tlalr / this.lasr1\n\t\t)} 2: ${ffix(lalr / this.lasr2)}\\n`;\n\t\tthis.lasl1 = ((2 * Math.PI) / this.gw1.TN) * this.gw1.blr;\n\t\tthis.lasl2 = ((2 * Math.PI) / this.gw2.TN) * this.gw2.blr;\n\t\tthis.msg += `Line of Action left: step length: 1: ${ffix(this.lasl1)} 2: ${ffix(\n\t\t\tthis.lasl2\n\t\t)} mm\\n`;\n\t\tthis.msg += `Line of Action left: nb of contact point: 1: ${ffix(\n\t\t\tlall / this.lasl1\n\t\t)} 2: ${ffix(lall / this.lasl2)}\\n`;\n\t}\n\tcalcContactPoint1() {\n\t\tthis.gw1.checkInitStep(5, 'ActionLine.calcContactPoint1');\n\t\tthis.firstToothUr1 = withinZero2Pi(\n\t\t\tthis.apr - (this.initAngle1 - this.angleCenterCenter) + this.gw1.rwp\n\t\t);\n\t\t//this.msg += `dbg625: apr ${ffix(this.apr)} initAngle1 ${ffix(this.initAngle1)} rwp ${ffix(this.gw1.rwp)} rad\\n`;\n\t\t//this.msg += `dbg626: firstToothUr1 ${ffix(this.firstToothUr1)} as ${ffix(this.gw1.as)} rad\\n`;\n\t\twhile (roundZero(this.firstToothUr1 - this.gw1.as) >= 0) {\n\t\t\tthis.firstToothUr1 = roundZero(this.firstToothUr1 - this.gw1.as);\n\t\t}\n\t\t//this.msg += `dbg627: firstToothUr1 ${ffix(this.firstToothUr1)} rad\\n`;\n\t\tthis.firstToothUl1 = withinZero2Pi(\n\t\t\tthis.apl +\n\t\t\t\t(this.initAngle1 - this.angleCenterCenter) +\n\t\t\t\tthis.gw1.as * this.gw1.adt -\n\t\t\t\tthis.gw1.lwp\n\t\t);\n\t\twhile (roundZero(this.firstToothUl1 - this.gw1.as) >= 0) {\n\t\t\tthis.firstToothUl1 = roundZero(this.firstToothUl1 - this.gw1.as);\n\t\t}\n\t\tthis.ftdr1 = this.gw1.brr * this.firstToothUr1;\n\t\tthis.ftdl1 = this.gw1.blr * this.firstToothUl1;\n\t\t//this.msg += `dbg112: right: ${ffix(this.ftdr1)} left: ${ffix(this.ftdl1)} mm\\n`;\n\t}\n\tprepare() {\n\t\tthis.check1();\n\t\tthis.check2();\n\t\tthis.calcActionLine();\n\t\tthis.calcContactPoint1();\n\t}\n\toneContactSpeed(\n\t\trnl: boolean,\n\t\tlBD: number,\n\t\tlas: number,\n\t\tftd: number,\n\t\tbaser: number,\n\t\tinvo: Involute,\n\t\tacc: number,\n\t\tap: number,\n\t\tlabel: string,\n\t\tcolor: string\n\t): tContour {\n\t\tconst speed = 0.4;\n\t\tconst larStepNb = Math.floor(lBD / (2 * las));\n\t\tconst ptu = (ftd + larStepNb * las) / baser;\n\t\tconst sign = rnl ? 1 : -1;\n\t\tconst [px, py, vx, vy] = invo.laptc(acc, sign * ap, ptu, speed);\n\t\tthis.msg += `speed ${label}: vx ${ffix(vx)} vy: ${ffix(vy)} m/s\\n`;\n\t\tconst pt0 = point(px, py);\n\t\tconst aa = acc + sign * ap;\n\t\tconst rCtr = contour(px, py, color);\n\t\tconst pt1 = pt0.translatePolar(aa, -vy);\n\t\trCtr.addSegStrokeA(pt1.cx, pt1.cy);\n\t\tconst pt2 = pt1.translatePolar(aa - (sign * Math.PI) / 2, vx);\n\t\trCtr.addSegStrokeA(pt2.cx, pt2.cy);\n\t\trCtr.closeSegStroke();\n\t\treturn rCtr;\n\t}\n\tgetContactSpeed(): tContour[] {\n\t\tconst ctrR1 = this.oneContactSpeed(\n\t\t\ttrue,\n\t\t\tthis.lBDr,\n\t\t\tthis.lasr1,\n\t\t\tthis.ftdr1,\n\t\t\tthis.gw1.brr,\n\t\t\tthis.gw1.involuteR,\n\t\t\tthis.angleCenterCenter,\n\t\t\tthis.apr,\n\t\t\t'R1',\n\t\t\t'Black'\n\t\t);\n\t\tconst ctrL1 = this.oneContactSpeed(\n\t\t\tfalse,\n\t\t\tthis.lBDl,\n\t\t\tthis.lasl1,\n\t\t\tthis.ftdl1,\n\t\t\tthis.gw1.blr,\n\t\t\tthis.gw1.involuteL,\n\t\t\tthis.angleCenterCenter,\n\t\t\tthis.apl,\n\t\t\t'L1',\n\t\t\t'Black'\n\t\t);\n\t\tconst rACtr: tContour[] = [];\n\t\trACtr.push(ctrR1);\n\t\trACtr.push(ctrL1);\n\t\treturn rACtr;\n\t}\n\tgetContours(): tContour[] {\n\t\tconst rACtr: tContour[] = [];\n\t\trACtr.push(contourCircle(this.gw1.cx, this.gw1.cy, this.laStartRr1, 'SkyBlue'));\n\t\trACtr.push(contourCircle(this.gw1.cx, this.gw1.cy, this.laStartRl1, 'SlateBlue'));\n\t\trACtr.push(contourCircle(this.gw2.cx, this.gw2.cy, this.laStartRr2, 'SkyBlue'));\n\t\trACtr.push(contourCircle(this.gw2.cx, this.gw2.cy, this.laStartRl2, 'SlateBlue'));\n\t\tconst c1 = point(this.gw1.cx, this.gw1.cy);\n\t\tconst c2 = point(this.gw2.cx, this.gw2.cy);\n\t\tconst pr1 = c1.translatePolar(this.angleCenterCenter + this.apr, this.gw1.brr);\n\t\tconst pr4 = c2.translatePolar(this.angleCenterCenter + Math.PI + this.apr, this.gw2.brr);\n\t\tconst ctrLaFullR = contour(pr1.cx, pr1.cy, 'YellowGreen');\n\t\tctrLaFullR.addSegStrokeA(pr4.cx, pr4.cy);\n\t\tctrLaFullR.closeSegStroke();\n\t\trACtr.push(ctrLaFullR);\n\t\tconst pr2 = c1.translatePolar(this.angleCenterCenter - this.aFODr1, this.gw1.ar);\n\t\tconst pr3 = c2.translatePolar(this.angleCenterCenter + Math.PI - this.aFODr2, this.gw2.ar);\n\t\tconst ctrLaEffectiveR = contour(pr2.cx, pr2.cy, 'Yellow');\n\t\tctrLaEffectiveR.addSegStrokeA(pr3.cx, pr3.cy);\n\t\tctrLaEffectiveR.closeSegStroke();\n\t\trACtr.push(ctrLaEffectiveR);\n\t\tconst pl1 = c1.translatePolar(this.angleCenterCenter - this.apl, this.gw1.blr);\n\t\tconst pl4 = c2.translatePolar(this.angleCenterCenter + Math.PI - this.apl, this.gw2.blr);\n\t\tconst ctrLaFullL = contour(pl1.cx, pl1.cy, 'YellowGreen');\n\t\tctrLaFullL.addSegStrokeA(pl4.cx, pl4.cy);\n\t\tctrLaFullL.closeSegStroke();\n\t\trACtr.push(ctrLaFullL);\n\t\tconst pl2 = c1.translatePolar(this.angleCenterCenter + this.aFODl1, this.gw1.ar);\n\t\tconst pl3 = c2.translatePolar(this.angleCenterCenter + Math.PI + this.aFODl2, this.gw2.ar);\n\t\tconst ctrLaEffectiveL = contour(pl2.cx, pl2.cy, 'Yellow');\n\t\tctrLaEffectiveL.addSegStrokeA(pl3.cx, pl3.cy);\n\t\tctrLaEffectiveL.closeSegStroke();\n\t\trACtr.push(ctrLaEffectiveL);\n\t\trACtr.push(...this.getContactSpeed());\n\t\treturn rACtr;\n\t}\n\tgetContactPoint(): Point[] {\n\t\tconst rApt: Point[] = [];\n\t\tconst c1 = point(this.gw1.cx, this.gw1.cy);\n\t\tconst cop1r0 = c1.translatePolar(this.angleCenterCenter + this.apr, this.gw1.brr);\n\t\tconst cop1l0 = c1.translatePolar(this.angleCenterCenter - this.apl, this.gw1.blr);\n\t\trApt.push(point(cop1r0.cx, cop1r0.cy, ShapePoint.eBigSquare));\n\t\trApt.push(point(cop1l0.cx, cop1l0.cy, ShapePoint.eBigSquare));\n\t\tconst cop1ra = this.angleCenterCenter + this.apr - Math.PI / 2;\n\t\tconst cop1la = this.angleCenterCenter - this.apl + Math.PI / 2;\n\t\tconst cop1r1 = cop1r0.translatePolar(cop1ra, this.ftdr1);\n\t\tconst cop1l1 = cop1l0.translatePolar(cop1la, this.ftdl1);\n\t\trApt.push(point(cop1r1.cx, cop1r1.cy, ShapePoint.eBigSquare));\n\t\trApt.push(point(cop1l1.cx, cop1l1.cy, ShapePoint.eBigSquare));\n\t\tlet cop1rdn = this.ftdr1;\n\t\twhile (cop1rdn + this.lasr1 < this.lBDr) {\n\t\t\tcop1rdn += this.lasr1;\n\t\t\tconst cop1rn = cop1r0.translatePolar(cop1ra, cop1rdn);\n\t\t\trApt.push(point(cop1rn.cx, cop1rn.cy, ShapePoint.eBigSquare));\n\t\t}\n\t\tlet cop1ldn = this.ftdl1;\n\t\twhile (cop1ldn + this.lasl1 < this.lBDl) {\n\t\t\tcop1ldn += this.lasl1;\n\t\t\tconst cop1ln = cop1l0.translatePolar(cop1la, cop1ldn);\n\t\t\trApt.push(point(cop1ln.cx, cop1ln.cy, ShapePoint.eBigSquare));\n\t\t}\n\t\treturn rApt;\n\t}\n\tgetMsg(): string {\n\t\treturn this.msg;\n\t}\n\tgetInitAngle2(): number {\n\t\tlet ftdr2 = this.lBDr - this.ftdr1;\n\t\twhile (roundZero(ftdr2 - this.lasr2) >= 0) {\n\t\t\tftdr2 = roundZero(ftdr2 - this.lasr2);\n\t\t}\n\t\tlet ftdl2 = this.lBDl - this.ftdl1;\n\t\twhile (roundZero(ftdl2 - this.lasl2) >= 0) {\n\t\t\tftdl2 = roundZero(ftdl2 - this.lasl2);\n\t\t}\n\t\tconst ftur2 = ftdr2 / this.gw2.brr;\n\t\tconst ftul2 = ftdl2 / this.gw2.blr;\n\t\tconst ftar2 = this.angleCenterCenter + Math.PI + this.apr - ftur2 + this.gw2.rwp;\n\t\tconst ftal2 = this.angleCenterCenter + Math.PI - this.apl + ftul2 + this.gw2.lwp;\n\t\tconst ftal2b = ftal2 - this.gw2.as * this.gw2.adt;\n\t\tlet angleL2 = 2 * Math.PI + withinZero2Pi(ftal2b);\n\t\twhile (roundZero(angleL2 - this.gw2.as - ftar2) >= 0) {\n\t\t\tangleL2 = roundZero(angleL2 - this.gw2.as);\n\t\t}\n\t\tconst angleDiff2 = angleL2 - ftar2;\n\t\tconst angleDiff1 = (angleDiff2 * this.gw2.brr) / this.gw1.brr;\n\t\tconst laDiffr2 = angleDiff2 * this.gw2.brr;\n\t\tconst laDiffl2 = angleDiff2 * this.gw2.blr;\n\t\tthis.msg += `slack angle: 1: ${ffix(radToDeg(angleDiff1))} 2: ${ffix(\n\t\t\tradToDeg(angleDiff2)\n\t\t)} degree\\n`;\n\t\tthis.msg += `slack on action line: right-2: ${ffix(laDiffr2)} left-2: ${ffix(\n\t\t\tlaDiffl2\n\t\t)} mm\\n`;\n\t\tlet rInitAngle2 = 0;\n\t\tif (this.rightLeftCenter2 === 0) {\n\t\t\trInitAngle2 = ftar2;\n\t\t} else if (this.rightLeftCenter2 === 1) {\n\t\t\trInitAngle2 = ftal2b;\n\t\t} else if (this.rightLeftCenter2 === 2) {\n\t\t\trInitAngle2 = ftar2 + angleDiff2 / 2;\n\t\t} else {\n\t\t\tthrow `err221: initAngle2 rightLeftCenter2 ${this.rightLeftCenter2} has an unkown value`;\n\t\t}\n\t\treturn withinPiPi(rInitAngle2);\n\t}\n}\n\nfunction actionLine(\n\tgw1: GearWheelProfile,\n\tgw2: GearWheelProfile,\n\tinitAngle1: number,\n\tangleCenterCenter: number,\n\tinterAxis: number,\n\trightLeftCenter2: number\n): ActionLine {\n\tconst rAL = new ActionLine(\n\t\tgw1,\n\t\tgw2,\n\t\tinitAngle1,\n\t\tangleCenterCenter,\n\t\tinterAxis,\n\t\trightLeftCenter2\n\t);\n\treturn rAL;\n}\n\nexport { gwProfile, gw2center, baseCircles, actionLine };\n","// involute.ts\n// the formula related to involute of circle\n\nclass Involute {\n\tbase_center_x: number;\n\tbase_center_y: number;\n\tbase_radius: number;\n\tinitial_angle: number;\n\tright_nleft: boolean;\n\tconstructor(cx: number, cy: number, br: number, ia: number, rnl: boolean) {\n\t\tthis.base_center_x = cx;\n\t\tthis.base_center_y = cy;\n\t\tthis.base_radius = br;\n\t\tthis.initial_angle = ia;\n\t\tthis.right_nleft = rnl;\n\t}\n\t// local polar coordinates (base circle center sets at x:0,y:0)\n\tangleSign(): number {\n\t\tconst sign = this.right_nleft ? 1 : -1;\n\t\treturn sign;\n\t}\n\tlFromU(au: number): number {\n\t\tconst rl = this.base_radius * Math.sqrt(1 + au ** 2);\n\t\treturn rl;\n\t}\n\twFromU(au: number): number {\n\t\tif (au < 0) {\n\t\t\tthrow `err729: involute parameter au ${au} is negative`;\n\t\t}\n\t\tif (Math.abs(au) > Math.PI / 2) {\n\t\t\tthrow `err730: involute parameter au ${au} is larger than PI/2`;\n\t\t}\n\t\tconst sign = this.angleSign();\n\t\tconst rw = sign * (au - Math.atan(au));\n\t\treturn rw;\n\t}\n\tw2FromU(au: number): number {\n\t\tconst rw2 = this.initial_angle + this.wFromU(au);\n\t\treturn rw2;\n\t}\n\t// Point C of the involute in cartesian coordinates\n\tptc(au: number): number[] {\n\t\tconst lcl = this.lFromU(au);\n\t\tconst lcw = this.w2FromU(au);\n\t\tconst ptcx = this.base_center_x + Math.cos(lcw) * lcl;\n\t\tconst ptcy = this.base_center_y + Math.sin(lcw) * lcl;\n\t\treturn [ptcx, ptcy];\n\t}\n\t// angle of the tangent inclination of the Point C of the involute\n\tptcta(au: number): number {\n\t\tconst rta = this.initial_angle + this.angleSign() * au;\n\t\treturn rta;\n\t}\n\t// get u from L\n\tuFromL(ll: number): number {\n\t\tconst ru = Math.sqrt(ll ** 2 / this.base_radius ** 2 - 1);\n\t\treturn ru;\n\t}\n\t// get u from w\n\tuFromWslow(lw: number): number {\n\t\tconst tolerance = 10 ** -4;\n\t\tlet itu = Math.PI / 3;\n\t\tlet itdu = itu / 2;\n\t\tlet itw = this.wFromU(itu);\n\t\tlet itcnt = 0;\n\t\twhile (Math.abs(itw - lw) > tolerance) {\n\t\t\tif (itw < lw) {\n\t\t\t\titu += itdu;\n\t\t\t} else {\n\t\t\t\titu -= itdu;\n\t\t\t}\n\t\t\titw = this.wFromU(itu);\n\t\t\titdu = itdu / 2;\n\t\t\titcnt += 1;\n\t\t}\n\t\tconsole.log(`dbg072: uFromWslow itcnt ${itcnt}`);\n\t\treturn itu;\n\t}\n\t// line of action\n\t// acc: angle of center-center line (rad)\n\t// ap: angle of pressue relative to the center-center line (rad)\n\t// aj: angle of rotation from the start of the line of action (rad)\n\t// sJ: angular speed of rotations (rad/s)\n\t// return\n\t// x,y of point C\n\t// vpx, vpy of speed vector of point C in line of pressure reference\n\tlaptc(acc: number, ap: number, aj: number, sJ: number): number[] {\n\t\tif (Math.sign(ap) * this.angleSign() < 0) {\n\t\t\tthrow `err904: Invole.laptc angle-of-pressure ${ap} not compatible with right_nleft ${this.right_nleft}`;\n\t\t}\n\t\tconst C0a = acc + ap;\n\t\tconst C0x = this.base_center_x + Math.cos(C0a) * this.base_radius;\n\t\tconst C0y = this.base_center_y + Math.sin(C0a) * this.base_radius;\n\t\tconst C2a = C0a - (this.angleSign() * Math.PI) / 2;\n\t\tconst lBC = aj * this.base_radius;\n\t\tconst C2x = C0x + Math.cos(C2a) * lBC;\n\t\tconst C2y = C0y + Math.sin(C2a) * lBC;\n\t\tconst lL = this.lFromU(aj);\n\t\tconst speed = lL * sJ;\n\t\tconst aspeed = aj;\n\t\tconst vpx = Math.cos(aspeed) * speed;\n\t\tconst vpy = Math.sin(aspeed) * speed;\n\t\treturn [C2x, C2y, vpx, vpy];\n\t}\n}\n\nfunction involute(cx: number, cy: number, br: number, ia: number, rnl: boolean): Involute {\n\tconst rinvolute = new Involute(cx, cy, br, ia, rnl);\n\treturn rinvolute;\n}\n\nexport type { Involute };\nexport { involute };\n","// wheelElements.ts\n\nimport type { tContour } from 'geometrix';\nimport { contour, contourCircle, point, ffix } from 'geometrix';\n\nfunction axisTorque(\n\tcx: number,\n\tcy: number,\n\taxisRadius: number,\n\tribNb: number,\n\tribWidth: number,\n\tribHeight: number,\n\tribRound1: number,\n\tribRound2: number,\n\tinitAngle: number\n): tContour {\n\tlet rCtr: tContour = contourCircle(cx, cy, axisRadius);\n\tif (ribNb > 0) {\n\t\tif (ribWidth > 2 * axisRadius) {\n\t\t\tthrow `err383: axisTorque ribWidth ${ffix(ribWidth)} larger than 2x axisRadius ${ffix(\n\t\t\t\taxisRadius\n\t\t\t)}`;\n\t\t}\n\t\tconst aRibW2 = Math.asin(ribWidth / (2 * axisRadius));\n\t\tconst aPeriod = (2 * Math.PI) / ribNb;\n\t\tif (aPeriod - 2.5 * aRibW2 < 0) {\n\t\t\tthrow `err384: axisTorque ribWidth ${ffix(ribWidth)} or ribNb ${ribNb} are too large`;\n\t\t}\n\t\tif (ribRound1 > ribWidth / 2) {\n\t\t\tthrow `err385: axisTorque ribRound1 ${ffix(\n\t\t\t\tribRound1\n\t\t\t)} too large compare to ribWidth ${ffix(ribWidth)}`;\n\t\t}\n\t\tif (ribRound1 + ribRound2 > ribHeight) {\n\t\t\tthrow `err386: axisTorque ribRound12 ${ffix(ribRound1)} ${ffix(\n\t\t\t\tribRound2\n\t\t\t)} too large compare to ribHeight ${ffix(ribWidth)}`;\n\t\t}\n\t\tconst arcLarge = aPeriod - 2 * aRibW2 > Math.PI ? true : false;\n\t\tconst pt0 = point(cx, cy);\n\t\tconst pt0z = pt0.translatePolar(initAngle, axisRadius + ribHeight);\n\t\tconst pt0b = pt0z.translatePolar(initAngle + Math.PI / 2, ribWidth / 2);\n\t\trCtr = contour(pt0b.cx, pt0b.cy);\n\t\tfor (let i = 0; i < ribNb; i++) {\n\t\t\tconst ribDir1 = initAngle + i * aPeriod;\n\t\t\tconst ribDir2 = ribDir1 + aPeriod;\n\t\t\tconst pt2 = pt0.translatePolar(ribDir1 + aRibW2, axisRadius);\n\t\t\tconst pt3 = pt0.translatePolar(ribDir2 - aRibW2, axisRadius);\n\t\t\tconst pt1z = pt0.translatePolar(ribDir1, axisRadius + ribHeight);\n\t\t\tconst pt1 = pt1z.translatePolar(ribDir1 + Math.PI / 2, ribWidth / 2);\n\t\t\tconst pt4z = pt0.translatePolar(ribDir2, axisRadius + ribHeight);\n\t\t\tconst pt4 = pt4z.translatePolar(ribDir2 - Math.PI / 2, ribWidth / 2);\n\t\t\trCtr.addSegStrokeA(pt1.cx, pt1.cy).addCornerRounded(ribRound1);\n\t\t\trCtr.addSegStrokeA(pt2.cx, pt2.cy).addCornerRounded(ribRound2);\n\t\t\trCtr.addPointA(pt3.cx, pt3.cy)\n\t\t\t\t.addSegArc(axisRadius, arcLarge, true)\n\t\t\t\t.addCornerRounded(ribRound2);\n\t\t\trCtr.addSegStrokeA(pt4.cx, pt4.cy).addCornerRounded(ribRound1);\n\t\t}\n\t\trCtr.closeSegStroke();\n\t}\n\treturn rCtr;\n}\n\nfunction hollowStraight(\n\tcx: number,\n\tcy: number,\n\thollowExt: number,\n\thollowInt: number,\n\tspokeNb: number,\n\tspokeWidth: number,\n\tspokeRound: number,\n\tinitAngle: number\n): tContour[] {\n\tconst aPeriod = (2 * Math.PI) / spokeNb;\n\tconst aW2Int = Math.asin(spokeWidth / (2 * hollowInt));\n\tconst aW2Ext = Math.asin(spokeWidth / (2 * hollowExt));\n\tif (spokeWidth > 2 * hollowInt) {\n\t\tthrow `err905: hollowStraight spokeWidth ${ffix(spokeWidth)} too large for hollowInt ${ffix(\n\t\t\thollowInt\n\t\t)}`;\n\t}\n\tif (hollowExt - hollowInt < 2.1 * spokeRound) {\n\t\tthrow `err906: hollowStraight hollowExt ${ffix(hollowExt)}, hollowInt ${ffix(\n\t\t\thollowInt\n\t\t)} and spokeRound ${ffix(spokeRound)} do not fit`;\n\t}\n\t// the formula of the following condition is approximate\n\tif (aPeriod - 2 * aW2Ext < 2.5 * Math.asin(spokeRound / hollowExt)) {\n\t\tthrow `err907: hollowStraight spokeNb ${spokeNb}, spokeWidth ${ffix(\n\t\t\tspokeWidth\n\t\t)} or spokeRound ${ffix(spokeRound)} are too large`;\n\t}\n\tconst dist5 = spokeWidth / (2 * Math.sin(aPeriod / 2));\n\tconst triangle = aPeriod - 2 * aW2Int < 2.1 * Math.asin(spokeRound / hollowInt) ? true : false;\n\tconst arcLarge = aPeriod - 2 * aW2Ext > Math.PI ? true : false;\n\t//console.log(`dbg908: triangle ${triangle}`);\n\tconst pt0 = point(cx, cy);\n\tconst rACtr: tContour[] = [];\n\tfor (let i = 0; i < spokeNb; i++) {\n\t\tconst aSpoke1 = initAngle + i * aPeriod;\n\t\tconst aSpoke2 = aSpoke1 + aPeriod;\n\t\tconst aSpoke5 = aSpoke1 + aPeriod / 2;\n\t\tconst pt1 = pt0.translatePolar(aSpoke1 + aW2Ext, hollowExt);\n\t\tconst pt2 = pt0.translatePolar(aSpoke2 - aW2Ext, hollowExt);\n\t\tconst pt3 = pt0.translatePolar(aSpoke2 - aW2Int, hollowInt);\n\t\tconst pt4 = pt0.translatePolar(aSpoke1 + aW2Int, hollowInt);\n\t\tconst pt5 = pt0.translatePolar(aSpoke5, dist5);\n\t\tconst ctr = contour(pt1.cx, pt1.cy);\n\t\tctr.addCornerRounded(spokeRound);\n\t\tctr.addPointA(pt2.cx, pt2.cy)\n\t\t\t.addSegArc(hollowExt, arcLarge, true)\n\t\t\t.addCornerRounded(spokeRound);\n\t\tif (triangle) {\n\t\t\tctr.addSegStrokeA(pt5.cx, pt5.cy).addCornerRounded(spokeRound);\n\t\t} else {\n\t\t\tctr.addSegStrokeA(pt3.cx, pt3.cy).addCornerRounded(spokeRound);\n\t\t\tctr.addPointA(pt4.cx, pt4.cy)\n\t\t\t\t.addSegArc(hollowInt, arcLarge, false)\n\t\t\t\t.addCornerRounded(spokeRound);\n\t\t}\n\t\tctr.closeSegStroke();\n\t\trACtr.push(ctr);\n\t}\n\treturn rACtr;\n}\nfunction hollowStraightArea(\n\tcx: number,\n\tcy: number,\n\thollowExt: number,\n\thollowInt: number,\n\tspokeNb: number,\n\tspokeWidth: number,\n\tspokeRound: number\n): number {\n\tconst rArea = cx + cy + hollowExt + hollowInt + spokeNb + spokeWidth + spokeRound;\n\treturn rArea;\n}\n\nfunction axisProfile(\n\twheelHeight: number,\n\twheelMidExtra: number,\n\twheelAxisLength: number,\n\twheelAxisRadius: number,\n\twheelMidRadius: number,\n\twheelRadius: number,\n\twheelAxisExtRound: number,\n\twheelAxisIntRound: number,\n\twheelExtraRound: number,\n\trightNLeft: boolean\n): tContour {\n\tconst rln = rightNLeft ? 1 : -1;\n\tconst wheelHeightHalf = wheelHeight / 2;\n\tconst wheelHalfLength = wheelHeightHalf + wheelMidExtra;\n\tconst axisHalfLength = wheelHalfLength + wheelAxisLength;\n\tconst rCtr = contour(0, -axisHalfLength);\n\trCtr.addSegStrokeA(rln * wheelAxisRadius, -axisHalfLength)\n\t\t.addCornerRounded(wheelAxisExtRound)\n\t\t.addSegStrokeA(rln * wheelAxisRadius, -wheelHalfLength)\n\t\t.addCornerRounded(wheelAxisIntRound)\n\t\t.addSegStrokeA(rln * wheelMidRadius, -wheelHalfLength)\n\t\t.addSegStrokeA(rln * wheelRadius, -wheelHeightHalf)\n\t\t.addCornerRounded(wheelExtraRound)\n\t\t.addSegStrokeA(rln * wheelRadius, wheelHeightHalf)\n\t\t.addCornerRounded(wheelExtraRound)\n\t\t.addSegStrokeA(rln * wheelMidRadius, wheelHalfLength)\n\t\t.addSegStrokeA(rln * wheelAxisRadius, wheelHalfLength)\n\t\t.addCornerRounded(wheelAxisIntRound)\n\t\t.addSegStrokeA(rln * wheelAxisRadius, axisHalfLength)\n\t\t.addCornerRounded(wheelAxisExtRound)\n\t\t.addSegStrokeA(0, axisHalfLength)\n\t\t.closeSegStroke();\n\treturn rCtr;\n}\n\nexport { axisTorque, hollowStraight, hollowStraightArea, axisProfile };\n","// simplified_gear_wheel.ts\n\nimport type {\n\ttParamDef,\n\ttParamVal,\n\ttGeom,\n\ttPageDef,\n\ttSubInst\n\t//tSubDesign\n} from 'geometrix';\n//import { contour, contourCircle, figure, degToRad } from 'geometrix';\nimport {\n\tdesignParam,\n\tcheckGeom,\n\tprefixLog,\n\t//contour,\n\tfigure,\n\t//degToRad,\n\t//ffix,\n\tpNumber,\n\tpCheckbox,\n\t//pDropdown,\n\tinitGeom,\n\t//EExtrude,\n\tEBVolume\n} from 'geometrix';\n//import * as gwHelper from './gearWheelProfile';\n//import * as welem from './wheelElements';\n\n// design import\nimport { gearWheelWheelDef } from './gear_wheel_wheel';\n\nconst pDef: tParamDef = {\n\tpartName: 'simplified_gear_wheel',\n\tparams: [\n\t\t//pNumber(name, unit, init, min, max, step)\n\t\tpNumber('module', 'mm', 10, 0.1, 100, 0.1),\n\t\tpNumber('N1', 'scalar', 23, 3, 1000, 1),\n\t\t//pNumber('N2', 'scalar', 19, 3, 1000, 1),\n\t\t//pNumber('angleCenterCenter', 'degree', 0, -180, 180, 1),\n\t\t//pNumber('addInterAxis', 'mm', 0, 0, 100, 0.05),\n\t\tpNumber('c1x', 'mm', 0, -200, 200, 1),\n\t\tpNumber('c1y', 'mm', 0, -200, 200, 1),\n\t\t//pNumber('ah1', 'scalar', 1, 0.1, 2, 0.05),\n\t\t//pNumber('dh1', 'scalar', 1, 0.1, 2, 0.05),\n\t\t//pNumber('bh1', 'scalar', 0.25, 0.1, 2, 0.05),\n\t\t//pNumber('bRound1', 'mm', 2, 0, 50, 0.1),\n\t\t//pNumber('ah2', 'scalar', 1, 0.1, 2, 0.05),\n\t\t//pNumber('dh2', 'scalar', 1, 0.1, 2, 0.05),\n\t\t//pNumber('bh2', 'scalar', 0.25, 0.1, 2, 0.05),\n\t\t//pNumber('bRound2', 'mm', 2, 0, 50, 0.1),\n\t\t//pNumber('at1', '%', 50, 10, 90, 0.5),\n\t\t//pNumber('at2', '%', 50, 10, 90, 0.5),\n\t\t//pCheckbox('involSym', true),\n\t\t//pDropdown('involROpt', ['Optimum', 'Base-1', 'Base-2', 'PressureAngle', 'FreeBase-12']),\n\t\t//pDropdown('involLOpt', ['Optimum', 'Base-1', 'Base-2', 'PressureAngle', 'FreeBase-12']),\n\t\t//pNumber('brr1', 'mm', 50, 10, 2000, 0.05),\n\t\t//pNumber('brr2', 'mm', 50, 10, 2000, 0.05),\n\t\t//pNumber('blr1', 'mm', 50, 10, 2000, 0.05),\n\t\t//pNumber('blr2', 'mm', 50, 10, 2000, 0.05),\n\t\t//pNumber('involArcPairs1', 'scalar', 2, 1, 40, 1),\n\t\t//pNumber('involArcPairs2', 'scalar', 2, 1, 40, 1),\n\t\t//pNumber('skinThickness1', 'mm', 0, -3, 3, 0.01),\n\t\t//pNumber('skinThickness2', 'mm', 0, -3, 3, 0.01),\n\t\t//pNumber('initAngle1', 'degree', 0, -180, 180, 1),\n\t\t//pDropdown('gw2Position', ['right', 'left', 'center']),\n\t\tpCheckbox('centralAxis', true),\n\t\tpNumber('axisRadius', 'mm', 10, 0.1, 200, 0.1),\n\t\tpNumber('ribNb', 'scalar', 5, 0, 32, 1),\n\t\tpNumber('ribWidth', 'mm', 8, 1, 100, 0.1),\n\t\tpNumber('ribHeight', 'mm', 8, 1, 100, 0.1),\n\t\tpNumber('ribRound1', 'mm', 2, 0, 20, 0.1),\n\t\tpNumber('ribRound2', 'mm', 2, 0, 20, 0.1),\n\t\tpCheckbox('hollow', true),\n\t\tpNumber('materialHeightExt', 'mm', 20, 1, 200, 0.5),\n\t\tpNumber('materialHeightInt', 'mm', 15, 1, 200, 0.5),\n\t\tpNumber('spokeNb', 'scalar', 5, 1, 18, 1),\n\t\tpNumber('spokeWidth', 'mm', 15, 1, 200, 0.1),\n\t\tpNumber('spokeRound', 'mm', 10, 0, 20, 0.1),\n\t\tpCheckbox('wheelAxis', true),\n\t\tpNumber('wheelHeight', 'mm', 40, 0.1, 400, 0.1),\n\t\tpNumber('wheelMidExtra', 'mm', 6, 0, 10, 0.1),\n\t\tpNumber('wheelAxisLength', 'mm', 40, 0, 400, 0.1),\n\t\tpNumber('wheelAxisRadius', 'mm', 20, 0, 200, 0.1),\n\t\tpNumber('wheelMidRadius', 'mm', 60, 0, 200, 0.1),\n\t\tpNumber('wheelRadiusExtra', 'mm', 1, 0, 20, 0.1),\n\t\tpNumber('wheelAxisExtRound', 'mm', 4, 0, 20, 0.1),\n\t\tpNumber('wheelAxisIntRound', 'mm', 0, 0, 20, 0.1),\n\t\tpNumber('wheelExtraRound', 'mm', 4, 0, 20, 0.1)\n\t],\n\tparamSvg: {\n\t\tmodule: 'default_param_blank.svg',\n\t\tN1: 'default_param_blank.svg',\n\t\t//N2: 'default_param_blank.svg',\n\t\t//angleCenterCenter: 'default_param_blank.svg',\n\t\t//addInterAxis: 'default_param_blank.svg',\n\t\tc1x: 'default_param_blank.svg',\n\t\tc1y: 'default_param_blank.svg',\n\t\t//ah1: 'default_param_blank.svg',\n\t\t//dh1: 'default_param_blank.svg',\n\t\t//bh1: 'default_param_blank.svg',\n\t\t//bRound1: 'default_param_blank.svg',\n\t\t//ah2: 'default_param_blank.svg',\n\t\t//dh2: 'default_param_blank.svg',\n\t\t//bh2: 'default_param_blank.svg',\n\t\t//bRound2: 'default_param_blank.svg',\n\t\t//at1: 'default_param_blank.svg',\n\t\t//at2: 'default_param_blank.svg',\n\t\t//involSym: 'default_param_blank.svg',\n\t\t//involROpt: 'default_param_blank.svg',\n\t\t//involLOpt: 'default_param_blank.svg',\n\t\t//brr1: 'default_param_blank.svg',\n\t\t//brr2: 'default_param_blank.svg',\n\t\t//blr1: 'default_param_blank.svg',\n\t\t//blr2: 'default_param_blank.svg',\n\t\t//involArcPairs1: 'default_param_blank.svg',\n\t\t//skinThickness1: 'default_param_blank.svg',\n\t\t//involArcPairs2: 'default_param_blank.svg',\n\t\t//skinThickness2: 'default_param_blank.svg',\n\t\t//initAngle1: 'default_param_blank.svg',\n\t\t//gw2Position: 'default_param_blank.svg',\n\t\tcentralAxis: 'default_param_blank.svg',\n\t\taxisRadius: 'default_param_blank.svg',\n\t\tribNb: 'default_param_blank.svg',\n\t\tribWidth: 'default_param_blank.svg',\n\t\tribHeight: 'default_param_blank.svg',\n\t\tribRound1: 'default_param_blank.svg',\n\t\tribRound2: 'default_param_blank.svg',\n\t\thollow: 'default_param_blank.svg',\n\t\tmaterialHeightExt: 'default_param_blank.svg',\n\t\tmaterialHeightInt: 'default_param_blank.svg',\n\t\tspokeNb: 'default_param_blank.svg',\n\t\tspokeWidth: 'default_param_blank.svg',\n\t\tspokeRound: 'default_param_blank.svg',\n\t\twheelAxis: 'default_param_blank.svg',\n\t\twheelHeight: 'default_param_blank.svg',\n\t\twheelMidExtra: 'default_param_blank.svg',\n\t\twheelAxisLength: 'default_param_blank.svg',\n\t\twheelAxisRadius: 'default_param_blank.svg',\n\t\twheelMidRadius: 'default_param_blank.svg',\n\t\twheelRadiusExtra: 'default_param_blank.svg',\n\t\twheelAxisExtRound: 'default_param_blank.svg',\n\t\twheelAxisIntRound: 'default_param_blank.svg',\n\t\twheelExtraRound: 'default_param_blank.svg'\n\t},\n\tsim: {\n\t\ttMax: 100,\n\t\ttStep: 0.5,\n\t\ttUpdate: 500 // every 0.5 second\n\t}\n};\n\nfunction pGeom(t: number, param: tParamVal): tGeom {\n\tconst rGeome = initGeom(pDef.partName);\n\tconst figOne = figure();\n\tconst figTwo = figure();\n\trGeome.logstr += `${rGeome.partName} simTime: ${t}\\n`;\n\ttry {\n\t\t// sub-design gear_wheel_wheel\n\t\tconst gearWWParam = designParam(gearWheelWheelDef.pDef);\n\t\tgearWWParam.setVal('module', param.module);\n\t\tgearWWParam.setVal('N1', param.N1);\n\t\tgearWWParam.setVal('c1x', param.c1x);\n\t\tgearWWParam.setVal('c1y', param.c1y);\n\t\tgearWWParam.setVal('centralAxis', param.centralAxis);\n\t\tgearWWParam.setVal('axisRadius', param.axisRadius);\n\t\tgearWWParam.setVal('ribNb', param.ribNb);\n\t\tgearWWParam.setVal('ribWidth', param.ribWidth);\n\t\tgearWWParam.setVal('ribHeight', param.ribHeight);\n\t\tgearWWParam.setVal('ribRound1', param.ribRound1);\n\t\tgearWWParam.setVal('ribRound2', param.ribRound2);\n\t\tgearWWParam.setVal('hollow', param.hollow);\n\t\tgearWWParam.setVal('materialHeightExt', param.materialHeightExt);\n\t\tgearWWParam.setVal('materialHeightInt', param.materialHeightInt);\n\t\tgearWWParam.setVal('spokeNb', param.spokeNb);\n\t\tgearWWParam.setVal('spokeWidth', param.spokeWidth);\n\t\tgearWWParam.setVal('spokeRound', param.spokeRound);\n\t\tgearWWParam.setVal('wheelAxis', param.wheelAxis);\n\t\tgearWWParam.setVal('wheelHeight', param.wheelHeight);\n\t\tgearWWParam.setVal('wheelMidExtra', param.wheelMidExtra);\n\t\tgearWWParam.setVal('wheelAxisLength', param.wheelAxisLength);\n\t\tgearWWParam.setVal('wheelAxisRadius', param.wheelAxisRadius);\n\t\tgearWWParam.setVal('wheelMidRadius', param.wheelMidRadius);\n\t\tgearWWParam.setVal('wheelRadiusExtra', param.wheelRadiusExtra);\n\t\tgearWWParam.setVal('wheelAxisExtRound', param.wheelAxisExtRound);\n\t\tgearWWParam.setVal('wheelAxisIntRound', param.wheelAxisIntRound);\n\t\tgearWWParam.setVal('wheelExtraRound', param.wheelExtraRound);\n\t\tconst gearWWGeom = gearWheelWheelDef.pGeom(t, gearWWParam.getParamVal());\n\t\tcheckGeom(gearWWGeom);\n\t\trGeome.logstr += prefixLog(gearWWGeom.logstr, gearWWParam.partName);\n\t\t// figures\n\t\tfigOne.mergeFigure(gearWWGeom.fig.teethProfile);\n\t\tfigTwo.mergeFigure(gearWWGeom.fig.axisProfile);\n\t\t// final figure list\n\t\trGeome.fig = { teethProfile: figOne, axisProfile: figTwo };\n\t\tconst designName = rGeome.partName;\n\t\trGeome.vol = {\n\t\t\tinherits: [\n\t\t\t\t{\n\t\t\t\t\toutName: `inpax_${designName}_gearWW`,\n\t\t\t\t\tsubdesign: 'pax_gear_wheel_wheel',\n\t\t\t\t\tsubgeom: gearWWGeom,\n\t\t\t\t\trotate: [0, 0, 0],\n\t\t\t\t\ttranslate: [0, 0, 0]\n\t\t\t\t}\n\t\t\t],\n\t\t\textrudes: [],\n\t\t\tvolumes: [\n\t\t\t\t{\n\t\t\t\t\toutName: `pax_${designName}`,\n\t\t\t\t\tboolMethod: EBVolume.eIdentity,\n\t\t\t\t\tinList: [`inpax_${designName}_gearWW`]\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t\t// sub-design\n\t\tconst subGearWW: tSubInst = {\n\t\t\tpartName: gearWWParam.getPartName(),\n\t\t\tdparam: gearWWParam.getDesignParamList(),\n\t\t\torientation: [0, 0, 0],\n\t\t\tposition: [0, 0, 0]\n\t\t};\n\t\t//console.log(subGearWW);\n\t\trGeome.sub = { gear_wheel_wheel_1: subGearWW };\n\t\t// finalize\n\t\trGeome.logstr += 'simplified_gear_wheel draw successfully!\\n';\n\t\trGeome.calcErr = false;\n\t} catch (emsg) {\n\t\trGeome.logstr += emsg as string;\n\t\tconsole.log(emsg as string);\n\t}\n\treturn rGeome;\n}\n\nconst simplifiedGearWheelDef: tPageDef = {\n\tpTitle: 'Simplified gearwheel',\n\tpDescription: 'One simplified gearwheel without details on teeth-profile',\n\tpDef: pDef,\n\tpGeom: pGeom\n};\n\nexport { simplifiedGearWheelDef };\n","// heliostat.ts\n\nimport type {\n\t//tContour,\n\ttParamDef,\n\ttParamVal,\n\ttGeom,\n\ttPageDef,\n\ttSubInst\n\t//tSubDesign\n} from 'geometrix';\nimport {\n\tdesignParam,\n\tcheckGeom,\n\tprefixLog,\n\t//contour,\n\t//contourCircle,\n\tfigure,\n\tdegToRad,\n\tradToDeg,\n\tffix,\n\tpNumber,\n\t//pCheckbox,\n\t//pDropdown,\n\tinitGeom,\n\t//EExtrude,\n\tEBVolume\n} from 'geometrix';\n\n// design import\nimport { poleStaticDef } from './pole_static';\nimport { rakeDef } from './rake';\nimport { spiderDef } from './spider';\nimport { swingDef } from './swing';\n\nconst pDef: tParamDef = {\n\tpartName: 'heliostat',\n\tparams: [\n\t\t//pNumber(name, unit, init, min, max, step)\n\t\tpNumber('H1', 'mm', 3000, 100, 40000, 10),\n\t\tpNumber('H2', 'mm', 2500, 100, 40000, 10),\n\t\tpNumber('H3', 'mm', 200, 10, 500, 10),\n\t\tpNumber('H4', 'mm', 800, 100, 4000, 10),\n\t\tpNumber('H5', 'mm', 3000, 100, 6000, 10),\n\t\tpNumber('H6', 'mm', 200, 100, 4000, 10),\n\t\tpNumber('H7', 'mm', 800, 100, 4000, 10),\n\t\tpNumber('H8', 'mm', 200, 100, 4000, 10),\n\t\tpNumber('H9', 'mm', 100, 10, 400, 10),\n\t\tpNumber('D1', 'mm', 1000, 100, 4000, 10),\n\t\tpNumber('D2', 'mm', 700, 100, 4000, 10),\n\t\tpNumber('D3', 'mm', 900, 100, 4000, 10),\n\t\tpNumber('D4', 'mm', 400, 100, 4000, 10),\n\t\tpNumber('D5', 'mm', 300, 100, 1000, 10),\n\t\tpNumber('D6', 'mm', 200, 100, 1000, 10),\n\t\tpNumber('D7', 'mm', 400, 100, 1000, 10),\n\t\tpNumber('D8', 'mm', 100, 10, 1000, 10),\n\t\tpNumber('D9', 'mm', 100, 10, 1000, 10),\n\t\tpNumber('S1', 'mm', 250, 10, 800, 10),\n\t\tpNumber('S2', 'mm', 200, 10, 800, 10),\n\t\tpNumber('E1', 'mm', 30, 1, 80, 1),\n\t\tpNumber('E2', 'mm', 50, 1, 80, 1),\n\t\tpNumber('L1', 'mm', 12500, 1000, 40000, 10),\n\t\tpNumber('L2', 'mm', 6000, 1000, 40000, 10),\n\t\tpNumber('L3', 'mm', 100, 10, 500, 10),\n\t\tpNumber('L4', 'mm', 600, 100, 4000, 10),\n\t\tpNumber('L5', 'mm', 2000, 100, 6000, 10),\n\t\tpNumber('L6', 'mm', 2000, 100, 6000, 10),\n\t\tpNumber('L7', 'mm', 100, 10, 1000, 10),\n\t\tpNumber('L8', 'mm', 200, 10, 1000, 10),\n\t\tpNumber('al', 'degree', 80, 0, 95, 1),\n\t\tpNumber('ar', 'degree', 80, 0, 95, 1)\n\t],\n\tparamSvg: {\n\t\tH1: 'heliostat_overview.svg',\n\t\tH2: 'heliostat_side.svg',\n\t\tH3: 'heliostat_side_sizing.svg',\n\t\tH4: 'heliostat_side_sizing.svg',\n\t\tH5: 'heliostat_side_sizing.svg',\n\t\tH6: 'heliostat_side_sizing.svg',\n\t\tH7: 'heliostat_side_sizing.svg',\n\t\tH8: 'heliostat_side_sizing.svg',\n\t\tH9: 'heliostat_side_sizing.svg',\n\t\tD1: 'heliostat_side_sizing.svg',\n\t\tD2: 'heliostat_side_sizing.svg',\n\t\tD3: 'heliostat_side_sizing.svg',\n\t\tD4: 'heliostat_side_sizing.svg',\n\t\tD5: 'heliostat_side_sizing.svg',\n\t\tD6: 'heliostat_side_sizing.svg',\n\t\tD7: 'heliostat_side_sizing.svg',\n\t\tD8: 'heliostat_side_sizing.svg',\n\t\tD9: 'heliostat_face_sizing.svg',\n\t\tS1: 'heliostat_side_sizing.svg',\n\t\tS2: 'heliostat_side_sizing.svg',\n\t\tE1: 'heliostat_side_sizing.svg',\n\t\tE2: 'heliostat_side_sizing.svg',\n\t\tL1: 'heliostat_face_sizing.svg',\n\t\tL2: 'heliostat_side_sizing.svg',\n\t\tL3: 'heliostat_face_sizing.svg',\n\t\tL4: 'heliostat_face_sizing.svg',\n\t\tL5: 'heliostat_face_sizing.svg',\n\t\tL6: 'heliostat_face_sizing.svg',\n\t\tL7: 'heliostat_face_sizing.svg',\n\t\tL8: 'heliostat_face_sizing.svg',\n\t\tal: 'heliostat_side_sizing.svg',\n\t\tar: 'heliostat_side_sizing.svg'\n\t},\n\tsim: {\n\t\ttMax: 180,\n\t\ttStep: 0.5,\n\t\ttUpdate: 500 // every 0.5 second\n\t}\n};\n\nfunction pGeom(t: number, param: tParamVal): tGeom {\n\tconst rGeome = initGeom(pDef.partName);\n\tconst figSide = figure();\n\tconst figFace = figure();\n\trGeome.logstr += `${rGeome.partName} simTime: ${t}\\n`;\n\ttry {\n\t\tconst helioHeight =\n\t\t\tparam.H1 + param.H2 - param.H3 + param.H4 + param.H5 - param.H6 + param.H7;\n\t\trGeome.logstr += `heliostat-height: ${ffix(helioHeight)}, diameter ${ffix(param.D1)} m\\n`;\n\t\trGeome.logstr += `heliostat-swing-length: ${ffix(param.L1)}, width ${ffix(param.L2)} m\\n`;\n\t\tconst posAngleMid = (param.al - param.ar) / 2;\n\t\tconst posAngleDegree =\n\t\t\tposAngleMid - (Math.sin((2 * Math.PI * t) / pDef.sim.tMax) * (param.al + param.ar)) / 2;\n\t\tconst posAngle = degToRad(posAngleDegree);\n\t\trGeome.logstr += `swing position angle: ${ffix(radToDeg(posAngle))} degree\\n`;\n\t\tconst rakePosY = param.H1 + param.H2 - param.H3;\n\t\tconst spiderPosY = rakePosY + param.H4 + param.H5 - param.H6 + param.H7;\n\t\tconst swingPosY = spiderPosY + param.H8;\n\t\t// sub-designs\n\t\tconst poleStaticParam = designParam(poleStaticDef.pDef);\n\t\tconst rakeParam = designParam(rakeDef.pDef);\n\t\tconst spiderParam = designParam(spiderDef.pDef);\n\t\tconst swingParam = designParam(swingDef.pDef);\n\t\tpoleStaticParam.setVal('H1', param.H1);\n\t\tpoleStaticParam.setVal('H2', param.H2);\n\t\tpoleStaticParam.setVal('D1', param.D1);\n\t\tpoleStaticParam.setVal('D2', param.D2);\n\t\tpoleStaticParam.setVal('E1', param.E1);\n\t\tpoleStaticParam.setVal('E2', param.E1);\n\t\trakeParam.setVal('H1', param.H4);\n\t\trakeParam.setVal('H2', param.H5);\n\t\trakeParam.setVal('D1', param.D3);\n\t\trakeParam.setVal('D2', param.D4);\n\t\trakeParam.setVal('L9', param.D3 / 2);\n\t\trakeParam.setVal('E1', param.E1);\n\t\trakeParam.setVal('E3', param.E1);\n\t\trakeParam.setVal('D3', param.D2 * 0.6);\n\t\tif (param.D2 > param.D3 - 2 * param.E1) {\n\t\t\tthrow `err153: D2 ${param.D2} too large compare to D3 ${param.D3} and E1 ${param.E1}`;\n\t\t}\n\t\trakeParam.setVal('H4', param.H6);\n\t\trakeParam.setVal('D4', param.D5);\n\t\trakeParam.setVal('L7', param.L7);\n\t\trakeParam.setVal('L8', param.L8);\n\t\trakeParam.setVal('D6', param.D9);\n\t\trakeParam.setVal('H5', param.H7 + param.H8);\n\t\trakeParam.setVal('D5', param.D6);\n\t\trakeParam.setVal('D8', param.D7);\n\t\tif (param.D6 >= param.D7) {\n\t\t\tthrow `err164: D6 ${param.D6} too large compare to D7 ${param.D7}`;\n\t\t}\n\t\tconst rakeL4 = param.L4 - 2 * param.L3;\n\t\trakeParam.setVal('L4', rakeL4);\n\t\tif (rakeL4 <= 0) {\n\t\t\tthrow `err169: L3 ${param.L3} too large compare to L4 ${param.L4}`;\n\t\t}\n\t\trakeParam.setVal('L5', param.L5 + 2 * param.L3);\n\t\trakeParam.setVal('L6', param.L6 + 2 * param.L3);\n\t\tconst spiderL5 = param.L5 * 0.96;\n\t\tspiderParam.setVal('L5', spiderL5);\n\t\tspiderParam.setVal('D1', param.D8);\n\t\tspiderParam.setVal('L1', param.S1);\n\t\tspiderParam.setVal('L2', param.S2);\n\t\tspiderParam.setVal('E2', param.E2);\n\t\tspiderParam.setVal('L4', param.L2 / 2 - param.H8);\n\t\tswingParam.setVal('L2', param.L2);\n\t\tswingParam.setVal('D1', param.D6);\n\t\tswingParam.setVal('H4', param.H9);\n\t\tswingParam.setVal('L1', param.L1);\n\t\tif (param.L1 < 4 * param.L4 + 2 * param.L6 + param.L5 + 2 * param.L3) {\n\t\t\tthrow `err185: L1 ${param.L1} too small compare to L4 ${param.L4}, L5 ${param.L5}, L6 ${param.L6}`;\n\t\t}\n\t\tswingParam.setVal('H1', param.L3);\n\t\tswingParam.setVal('H2', param.L3);\n\t\tswingParam.setVal('L4', param.L4);\n\t\tswingParam.setVal('L5', param.L5);\n\t\tswingParam.setVal('L6', param.L6);\n\t\tswingParam.setVal('L3', param.D7);\n\t\tconst poleStaticGeom = poleStaticDef.pGeom(0, poleStaticParam.getParamVal());\n\t\tcheckGeom(poleStaticGeom);\n\t\trGeome.logstr += prefixLog(poleStaticGeom.logstr, poleStaticParam.partName);\n\t\tconst rakeGeom = rakeDef.pGeom(0, rakeParam.getParamVal());\n\t\tcheckGeom(rakeGeom);\n\t\trGeome.logstr += prefixLog(rakeGeom.logstr, rakeParam.partName);\n\t\tconst spiderGeom = spiderDef.pGeom(0, spiderParam.getParamVal());\n\t\tcheckGeom(spiderGeom);\n\t\trGeome.logstr += prefixLog(spiderGeom.logstr, spiderParam.partName);\n\t\tconst swingGeom = swingDef.pGeom(0, swingParam.getParamVal());\n\t\tcheckGeom(swingGeom);\n\t\trGeome.logstr += prefixLog(swingGeom.logstr, swingParam.partName);\n\t\t// figSide\n\t\tfigSide.mergeFigure(poleStaticGeom.fig.poleCut);\n\t\tfigSide.mergeFigure(rakeGeom.fig.faceBeam.translate(0, rakePosY));\n\t\tfigSide.mergeFigure(\n\t\t\tspiderGeom.fig.faceLegs.translate(0, spiderPosY).rotate(0, spiderPosY, posAngle / 2)\n\t\t);\n\t\tfigSide.mergeFigure(\n\t\t\tswingGeom.fig.faceSide.translate(0, swingPosY).rotate(0, swingPosY, posAngle)\n\t\t);\n\t\t// figFace\n\t\tfigFace.mergeFigure(poleStaticGeom.fig.poleCut);\n\t\tfigFace.mergeFigure(rakeGeom.fig.faceCone.translate(0, rakePosY));\n\t\tfigFace.mergeFigure(spiderGeom.fig.faceBody.translate(-spiderL5 / 2, spiderPosY));\n\t\tfigFace.mergeFigure(swingGeom.fig.faceFace.translate(0, swingPosY));\n\t\t// final figure list\n\t\trGeome.fig = {\n\t\t\tfaceSide: figSide,\n\t\t\tfaceFace: figFace\n\t\t};\n\t\tconst designName = rGeome.partName;\n\t\trGeome.vol = {\n\t\t\tinherits: [\n\t\t\t\t{\n\t\t\t\t\toutName: `inpax_${designName}_poleStatic`,\n\t\t\t\t\tsubdesign: 'pax_pole_static',\n\t\t\t\t\tsubgeom: poleStaticGeom,\n\t\t\t\t\trotate: [0, 0, 0],\n\t\t\t\t\ttranslate: [0, 0, 0]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `inpax_${designName}_rake`,\n\t\t\t\t\tsubdesign: 'pax_rake',\n\t\t\t\t\tsubgeom: rakeGeom,\n\t\t\t\t\trotate: [0, 0, 0],\n\t\t\t\t\ttranslate: [0, 0, rakePosY]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `inpax_${designName}_swing`,\n\t\t\t\t\tsubdesign: 'pax_swing',\n\t\t\t\t\tsubgeom: swingGeom,\n\t\t\t\t\trotate: [Math.PI / 2, 0, 0],\n\t\t\t\t\ttranslate: [0, 0, swingPosY]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `inpax_${designName}_spider`,\n\t\t\t\t\tsubdesign: 'pax_spider',\n\t\t\t\t\tsubgeom: spiderGeom,\n\t\t\t\t\trotate: [Math.PI / 2, 0, 0],\n\t\t\t\t\ttranslate: [0, spiderL5 / 2, spiderPosY]\n\t\t\t\t}\n\t\t\t],\n\t\t\textrudes: [],\n\t\t\tvolumes: [\n\t\t\t\t{\n\t\t\t\t\toutName: `pax_${designName}`,\n\t\t\t\t\tboolMethod: EBVolume.eUnion,\n\t\t\t\t\tinList: [\n\t\t\t\t\t\t`inpax_${designName}_poleStatic`,\n\t\t\t\t\t\t`inpax_${designName}_rake`,\n\t\t\t\t\t\t`inpax_${designName}_swing`,\n\t\t\t\t\t\t`inpax_${designName}_spider`\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t\t// sub-design\n\t\tconst subPoleStatic: tSubInst = {\n\t\t\tpartName: poleStaticParam.getPartName(),\n\t\t\tdparam: poleStaticParam.getDesignParamList(),\n\t\t\torientation: [0, 0, 0],\n\t\t\tposition: [0, 0, 0]\n\t\t};\n\t\tconst subRake: tSubInst = {\n\t\t\tpartName: rakeParam.getPartName(),\n\t\t\tdparam: rakeParam.getDesignParamList(),\n\t\t\torientation: [0, 0, 0],\n\t\t\tposition: [0, 0, rakePosY]\n\t\t};\n\t\tconst subSpider: tSubInst = {\n\t\t\tpartName: rakeParam.getPartName(),\n\t\t\tdparam: rakeParam.getDesignParamList(),\n\t\t\torientation: [Math.PI / 2, 0, 0],\n\t\t\tposition: [0, spiderL5 / 2, spiderPosY]\n\t\t};\n\t\tconst subSwing: tSubInst = {\n\t\t\tpartName: swingParam.getPartName(),\n\t\t\tdparam: swingParam.getDesignParamList(),\n\t\t\torientation: [Math.PI / 2, 0, 0],\n\t\t\tposition: [0, 0, swingPosY]\n\t\t};\n\t\trGeome.sub = {\n\t\t\tpole_static_1: subPoleStatic,\n\t\t\trake_1: subRake,\n\t\t\tspider_1: subSpider,\n\t\t\tswing_1: subSwing\n\t\t};\n\t\t// finalize\n\t\trGeome.logstr += 'heliostat-overview draw successfully!\\n';\n\t\trGeome.calcErr = false;\n\t} catch (emsg) {\n\t\trGeome.logstr += emsg as string;\n\t\tconsole.log(emsg as string);\n\t}\n\treturn rGeome;\n}\n\nconst heliostatDef: tPageDef = {\n\tpTitle: 'Heliostat overview',\n\tpDescription: 'The heliostat inclination mechanism',\n\tpDef: pDef,\n\tpGeom: pGeom\n};\n\nexport { heliostatDef };\n","// pole_static.ts\n\nimport type {\n\ttContour,\n\ttParamDef,\n\ttParamVal,\n\ttGeom,\n\ttPageDef\n\t//tSubInst\n\t//tSubDesign\n} from 'geometrix';\nimport {\n\tcontour,\n\tcontourCircle,\n\tfigure,\n\t//degToRad,\n\tradToDeg,\n\tffix,\n\tpNumber,\n\t//pCheckbox,\n\t//pDropdown,\n\tinitGeom,\n\tEExtrude,\n\tEBVolume\n} from 'geometrix';\n\nconst pDef: tParamDef = {\n\tpartName: 'pole_static',\n\tparams: [\n\t\t//pNumber(name, unit, init, min, max, step)\n\t\tpNumber('D1', 'mm', 1000, 100, 4000, 10),\n\t\tpNumber('D2', 'mm', 700, 100, 4000, 10),\n\t\tpNumber('D3', 'mm', 800, 100, 4000, 10),\n\t\tpNumber('H1', 'mm', 3000, 100, 40000, 10),\n\t\tpNumber('H2', 'mm', 7000, 100, 40000, 10),\n\t\tpNumber('E1', 'mm', 30, 1, 80, 1),\n\t\tpNumber('E2', 'mm', 5, 1, 80, 1),\n\t\tpNumber('N1', '', 32, 3, 100, 1),\n\t\tpNumber('D5', 'mm', 40, 1, 100, 1),\n\t\tpNumber('L1', 'mm', 45, 1, 300, 1),\n\t\tpNumber('D4', 'mm', 600, 200, 1200, 1),\n\t\tpNumber('H3', 'mm', 300, 50, 1200, 1),\n\t\tpNumber('H4', 'mm', 1800, 200, 2500, 1),\n\t\tpNumber('L2', 'mm', 30, 1, 100, 1),\n\t\tpNumber('E3', 'mm', 40, 1, 100, 1)\n\t],\n\tparamSvg: {\n\t\tD1: 'pole_stator_cut.svg',\n\t\tD2: 'pole_stator_cut.svg',\n\t\tD3: 'pole_stator_cut.svg',\n\t\tH1: 'pole_stator_cut.svg',\n\t\tH2: 'pole_stator_cut.svg',\n\t\tE1: 'pole_stator_cut.svg',\n\t\tE2: 'pole_stator_E2.svg',\n\t\tN1: 'pole_stator_bottom.svg',\n\t\tD5: 'pole_stator_bottom.svg',\n\t\tL1: 'pole_stator_bottom.svg',\n\t\tD4: 'pole_stator_face.svg',\n\t\tH3: 'pole_stator_face.svg',\n\t\tH4: 'pole_stator_face.svg',\n\t\tL2: 'pole_stator_face.svg',\n\t\tE3: 'pole_stator_right.svg'\n\t},\n\tsim: {\n\t\ttMax: 180,\n\t\ttStep: 0.5,\n\t\ttUpdate: 500 // every 0.5 second\n\t}\n};\n\ntype tCtr1 = (orient: number, withR3: boolean) => tContour;\ntype tCtr2 = (pL2: number) => tContour;\n\nfunction pGeom(t: number, param: tParamVal): tGeom {\n\tlet ctrPoleProfile: tCtr1;\n\tlet ctrDoorFace: tCtr2;\n\tconst rGeome = initGeom(pDef.partName);\n\tconst figCut = figure();\n\tconst figFace = figure();\n\tconst figBottom = figure();\n\tconst figEmptyPole = figure();\n\tconst figEmptyDoor = figure();\n\trGeome.logstr += `${rGeome.partName} simTime: ${t}\\n`;\n\ttry {\n\t\tconst R1 = param.D1 / 2;\n\t\tconst R2 = param.D2 / 2;\n\t\tconst R3 = param.D3 / 2;\n\t\tif (R2 > R1) {\n\t\t\tthrow `err091: D2 ${param.D2} is larger than D1 ${param.D1}`;\n\t\t}\n\t\tif (R3 + param.E2 > R1) {\n\t\t\tthrow `err095: D3 ${param.D3} and E2 ${param.E2} are too large compare to D1 ${param.D1}`;\n\t\t}\n\t\tconst poleHeight = param.H1 + param.H2;\n\t\trGeome.logstr += `pole-height: ${ffix(poleHeight)} mm\\n`;\n\t\tconst coneAngle = Math.atan2(R1 - R2, param.H2);\n\t\trGeome.logstr += `cone-half-angle: ${ffix(radToDeg(coneAngle))} degree\\n`;\n\t\tconst H1bminus = param.E2 * Math.tan(coneAngle / 2);\n\t\tconst H1b = param.H1 - H1bminus;\n\t\t// figCut\n\t\tctrPoleProfile = function (orient: number, withR3: boolean): tContour {\n\t\t\tconst rPoleProfile = contour(orient * R1, 0)\n\t\t\t\t.addSegStrokeA(orient * R1, param.H1)\n\t\t\t\t.addSegStrokeA(orient * R2, poleHeight)\n\t\t\t\t.addSegStrokeR(\n\t\t\t\t\t-orient * param.E2 * Math.cos(coneAngle),\n\t\t\t\t\t-param.E2 * Math.sin(coneAngle)\n\t\t\t\t)\n\t\t\t\t.addSegStrokeA(orient * (R1 - param.E2), H1b);\n\t\t\tif (withR3) {\n\t\t\t\trPoleProfile\n\t\t\t\t\t.addSegStrokeA(orient * (R1 - param.E2), param.E1)\n\t\t\t\t\t.addSegStrokeA(orient * R3, param.E1)\n\t\t\t\t\t.addSegStrokeA(orient * R3, 0);\n\t\t\t} else {\n\t\t\t\trPoleProfile.addSegStrokeA(orient * (R1 - param.E2), 0);\n\t\t\t}\n\t\t\trPoleProfile.closeSegStroke();\n\t\t\treturn rPoleProfile;\n\t\t};\n\t\tfigCut.addMain(ctrPoleProfile(1, false));\n\t\tfigCut.addSecond(ctrPoleProfile(1, true));\n\t\tfigCut.addSecond(ctrPoleProfile(-1, true));\n\t\t// figFace\n\t\tconst R4 = param.D4 / 2;\n\t\tconst doorStraightLenght = param.H4 - 2 * R4;\n\t\tif (doorStraightLenght < 0) {\n\t\t\tthrow `err121: H4 ${param.H4} is too small compare to D4 ${param.D4}`;\n\t\t}\n\t\tif (R4 - param.L2 < 0) {\n\t\t\tthrow `err121: D4 ${param.D4} is too small compare to L2 ${param.L2}`;\n\t\t}\n\t\tctrDoorFace = function (pL2: number): tContour {\n\t\t\tconst R4b = R4 - pL2;\n\t\t\tconst H3b = param.H3 + R4;\n\t\t\tconst rCtrDoorFace = contour(R4b, H3b + doorStraightLenght)\n\t\t\t\t.addPointR(-R4b, R4b)\n\t\t\t\t.addSegArc(R4b, false, true)\n\t\t\t\t.addPointR(-R4b, -R4b)\n\t\t\t\t.addSegArc(R4b, false, true)\n\t\t\t\t.addSegStrokeR(0, -doorStraightLenght)\n\t\t\t\t.addPointR(R4b, -R4b)\n\t\t\t\t.addSegArc(R4b, false, true)\n\t\t\t\t.addPointR(R4b, R4b)\n\t\t\t\t.addSegArc(R4b, false, true)\n\t\t\t\t.closeSegStroke();\n\t\t\treturn rCtrDoorFace;\n\t\t};\n\t\tfigFace.addMain(ctrDoorFace(0));\n\t\tfigFace.addMain(ctrDoorFace(param.L2));\n\t\tconst ctrPoleFace = contour(R1, 0)\n\t\t\t.addSegStrokeA(R1, param.H1)\n\t\t\t.addSegStrokeA(R2, poleHeight)\n\t\t\t.addSegStrokeA(-R2, poleHeight)\n\t\t\t.addSegStrokeA(-R1, param.H1)\n\t\t\t.addSegStrokeA(-R1, 0)\n\t\t\t.closeSegStroke();\n\t\tfigFace.addSecond(ctrPoleFace);\n\t\tconst ctrDoorSide = contour(-R1, param.H3)\n\t\t\t.addSegStrokeR(0, param.H4)\n\t\t\t.addSegStrokeR(-param.E3, 0)\n\t\t\t.addSegStrokeR(0, -param.H4)\n\t\t\t.closeSegStroke();\n\t\tfigFace.addSecond(ctrDoorSide);\n\t\t// figBottom\n\t\tfigBottom.addMain(contourCircle(0, 0, R1));\n\t\tfigBottom.addMain(contourCircle(0, 0, R3));\n\t\tconst posR = R3 + param.L1;\n\t\tconst posA = (2 * Math.PI) / param.N1;\n\t\tfor (let i = 0; i < param.N1; i++) {\n\t\t\tconst posX = posR * Math.cos(i * posA);\n\t\t\tconst posY = posR * Math.sin(i * posA);\n\t\t\tfigBottom.addMain(contourCircle(posX, posY, param.D5 / 2));\n\t\t}\n\t\tfigBottom.addSecond(contourCircle(0, 0, R2));\n\t\tfigBottom.addSecond(contourCircle(0, 0, R1 - param.E2));\n\t\t// figEmptyPole\n\t\tfigEmptyPole.addMain(contourCircle(0, 0, R1 + param.E3));\n\t\tfigEmptyPole.addMain(contourCircle(0, 0, R1 - param.E2));\n\t\t// figEmptyDoor\n\t\tfigEmptyDoor.addMain(ctrDoorFace(param.L2));\n\t\t// final figure list\n\t\trGeome.fig = {\n\t\t\tpoleCut: figCut,\n\t\t\tpoleFace: figFace,\n\t\t\tpoleBottom: figBottom,\n\t\t\temptyPole: figEmptyPole,\n\t\t\temptyDoor: figEmptyDoor\n\t\t};\n\t\tconst designName = rGeome.partName;\n\t\trGeome.vol = {\n\t\t\textrudes: [\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_pole`,\n\t\t\t\t\tface: `${designName}_poleCut`,\n\t\t\t\t\textrudeMethod: EExtrude.eRotate,\n\t\t\t\t\trotate: [0, 0, 0],\n\t\t\t\t\ttranslate: [0, 0, 0]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_bottom`,\n\t\t\t\t\tface: `${designName}_poleBottom`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: param.E1,\n\t\t\t\t\trotate: [0, 0, 0],\n\t\t\t\t\ttranslate: [0, 0, 0]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_door`,\n\t\t\t\t\tface: `${designName}_poleFace`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: R1 + param.E3,\n\t\t\t\t\trotate: [Math.PI / 2, 0, 0],\n\t\t\t\t\ttranslate: [0, 0, 0]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_emptyPole`,\n\t\t\t\t\tface: `${designName}_emptyPole`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: param.H1,\n\t\t\t\t\trotate: [0, 0, 0],\n\t\t\t\t\ttranslate: [0, 0, 0]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_emptyDoor`,\n\t\t\t\t\tface: `${designName}_emptyDoor`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: R1 + param.E3 + 10,\n\t\t\t\t\trotate: [Math.PI / 2, 0, 0],\n\t\t\t\t\ttranslate: [0, 0, 0]\n\t\t\t\t}\n\t\t\t],\n\t\t\tvolumes: [\n\t\t\t\t{\n\t\t\t\t\toutName: `ipax_${designName}_door`,\n\t\t\t\t\t//boolMethod: EBVolume.eSubstraction,\n\t\t\t\t\tboolMethod: EBVolume.eIntersection,\n\t\t\t\t\tinList: [`subpax_${designName}_door`, `subpax_${designName}_emptyPole`]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `ipax_${designName}_pole`,\n\t\t\t\t\tboolMethod: EBVolume.eSubstraction,\n\t\t\t\t\tinList: [`subpax_${designName}_pole`, `subpax_${designName}_emptyDoor`]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `pax_${designName}`,\n\t\t\t\t\tboolMethod: EBVolume.eUnion,\n\t\t\t\t\tinList: [\n\t\t\t\t\t\t`ipax_${designName}_pole`,\n\t\t\t\t\t\t`subpax_${designName}_bottom`,\n\t\t\t\t\t\t`ipax_${designName}_door`\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t\t// sub-design\n\t\trGeome.sub = {};\n\t\t// finalize\n\t\trGeome.logstr += 'pole_static draw successfully!\\n';\n\t\trGeome.calcErr = false;\n\t} catch (emsg) {\n\t\trGeome.logstr += emsg as string;\n\t\tconsole.log(emsg as string);\n\t}\n\treturn rGeome;\n}\n\nconst poleStaticDef: tPageDef = {\n\tpTitle: 'Heliostat pole static',\n\tpDescription: 'The vertical pole of an heliostat',\n\tpDef: pDef,\n\tpGeom: pGeom\n};\n\nexport { poleStaticDef };\n","// rake.ts\n\nimport type {\n\ttContour,\n\ttParamDef,\n\ttParamVal,\n\ttGeom,\n\ttExtrude,\n\ttPageDef\n\t//tSubInst\n\t//tSubDesign\n} from 'geometrix';\nimport {\n\tcontour,\n\tcontourCircle,\n\tfigure,\n\t//degToRad,\n\tradToDeg,\n\tffix,\n\tpNumber,\n\t//pCheckbox,\n\t//pDropdown,\n\tinitGeom,\n\tEExtrude,\n\tEBVolume\n} from 'geometrix';\n\nconst pDef: tParamDef = {\n\tpartName: 'rake',\n\tparams: [\n\t\t//pNumber(name, unit, init, min, max, step)\n\t\tpNumber('D1', 'mm', 600, 100, 4000, 10),\n\t\tpNumber('D2', 'mm', 400, 100, 4000, 10),\n\t\tpNumber('D3', 'mm', 400, 100, 4000, 10),\n\t\tpNumber('H1', 'mm', 800, 100, 4000, 10),\n\t\tpNumber('H2', 'mm', 3000, 100, 6000, 10),\n\t\tpNumber('H3', 'mm', 400, 0, 4000, 10),\n\t\tpNumber('E1', 'mm', 20, 1, 80, 1),\n\t\tpNumber('E3', 'mm', 30, 1, 80, 1),\n\t\tpNumber('H4', 'mm', 400, 100, 1000, 10),\n\t\tpNumber('D4', 'mm', 300, 100, 1000, 10),\n\t\tpNumber('E4', 'mm', 20, 1, 80, 1),\n\t\tpNumber('H5', 'mm', 1000, 100, 2000, 10),\n\t\tpNumber('D5', 'mm', 200, 10, 1000, 10),\n\t\tpNumber('L4', 'mm', 300, 10, 1000, 10),\n\t\tpNumber('L5', 'mm', 2000, 100, 4000, 10),\n\t\tpNumber('L6', 'mm', 2000, 100, 4000, 10),\n\t\tpNumber('D6', 'mm', 100, 10, 600, 10),\n\t\tpNumber('E6', 'mm', 10, 1, 80, 1),\n\t\tpNumber('L7', 'mm', 100, 10, 1000, 1),\n\t\tpNumber('L8', 'mm', 200, 10, 1000, 1),\n\t\tpNumber('N1', '', 24, 3, 100, 1),\n\t\tpNumber('D7', 'mm', 40, 1, 100, 1),\n\t\tpNumber('L1', 'mm', 30, 1, 300, 1),\n\t\tpNumber('D8', 'mm', 400, 100, 1000, 10),\n\t\tpNumber('H6', 'mm', 100, 50, 1000, 10),\n\t\tpNumber('H7', 'mm', 600, 100, 2000, 10),\n\t\tpNumber('L9', 'mm', 300, 100, 1000, 10),\n\t\tpNumber('R9', 'mm', 50, 0, 300, 1)\n\t],\n\tparamSvg: {\n\t\tD1: 'rake_face.svg',\n\t\tD2: 'rake_face.svg',\n\t\tD3: 'rake_face.svg',\n\t\tH1: 'rake_face.svg',\n\t\tH2: 'rake_face.svg',\n\t\tH3: 'rake_face.svg',\n\t\tE1: 'rake_face.svg',\n\t\tE3: 'rake_face.svg',\n\t\tH4: 'rake_side.svg',\n\t\tD4: 'rake_side.svg',\n\t\tE4: 'rake_side.svg',\n\t\tH5: 'rake_side.svg',\n\t\tD5: 'rake_side.svg',\n\t\tL4: 'rake_face.svg',\n\t\tL5: 'rake_face.svg',\n\t\tL6: 'rake_face.svg',\n\t\tD6: 'rake_face.svg',\n\t\tE6: 'rake_face.svg',\n\t\tL7: 'rake_face.svg',\n\t\tL8: 'rake_face.svg',\n\t\tN1: 'rake_top.svg',\n\t\tD7: 'rake_top.svg',\n\t\tL1: 'rake_top.svg',\n\t\tD8: 'rake_side.svg',\n\t\tH6: 'rake_door.svg',\n\t\tH7: 'rake_door.svg',\n\t\tL9: 'rake_door.svg',\n\t\tR9: 'rake_door.svg'\n\t},\n\tsim: {\n\t\ttMax: 180,\n\t\ttStep: 0.5,\n\t\ttUpdate: 500 // every 0.5 second\n\t}\n};\n\ntype tCtr1 = (orient: number) => tContour;\ntype tCtr2 = (width: number, height: number, xpos: number, ypos: number, angle: number) => tContour;\n\nfunction pGeom(t: number, param: tParamVal): tGeom {\n\tlet ctrCone: tCtr1;\n\tlet ctrConePlus: tCtr1;\n\tlet ctrRect: tCtr2;\n\tconst rGeome = initGeom(pDef.partName);\n\tconst figCone = figure();\n\tconst figBeam = figure();\n\tconst figBeamHollow = figure();\n\tconst figDisc = figure();\n\tconst figHand = figure();\n\tconst figWing = figure();\n\tconst figWingHollow = figure();\n\tconst figDoor = figure();\n\trGeome.logstr += `${rGeome.partName} simTime: ${t}\\n`;\n\ttry {\n\t\tconst R1 = param.D1 / 2;\n\t\tconst R2 = param.D2 / 2;\n\t\tconst R3 = param.D3 / 2;\n\t\tconst R4 = param.D4 / 2;\n\t\tconst R5 = param.D5 / 2;\n\t\tconst R6 = param.D6 / 2;\n\t\tconst R7 = param.D7 / 2;\n\t\tconst R8 = param.D8 / 2;\n\t\tconst H1H2 = param.H1 + param.H2;\n\t\tconst H1H5 = H1H2 - param.H4 + param.H5;\n\t\trGeome.logstr += `cone-height: ${ffix(H1H2)} mm\\n`;\n\t\trGeome.logstr += `cone-height total: ${ffix(H1H5)} mm\\n`;\n\t\tif (param.D2 > param.D1) {\n\t\t\tthrow `err110: D2 ${param.D2} is larger than D1 ${param.D1}`;\n\t\t}\n\t\tif (param.D3 + param.E1 > param.D1) {\n\t\t\tthrow `err113: D3 ${param.D3} is too large compare to D1 ${param.D1} and E1 ${param.E1}`;\n\t\t}\n\t\tif (param.H3 + param.E3 > param.H1) {\n\t\t\tthrow `err116: H3 ${param.H3} is too large compare to H1 ${param.H1} and E3 ${param.E3}`;\n\t\t}\n\t\tif (param.H4 + R4 > param.H2) {\n\t\t\tthrow `err119: H4 ${param.H4} is too large compare to H2 ${param.H2} and D4 ${param.D4}`;\n\t\t}\n\t\tif (param.E4 > R4) {\n\t\t\tthrow `err122: E4 ${param.E4} is too large compare to D4 ${param.D4}`;\n\t\t}\n\t\tif (param.D8 <= param.D5) {\n\t\t\tthrow `err146: D8 ${param.D8} is too small compare to D5 ${param.D5}`;\n\t\t}\n\t\tconst beamL = 4 * param.L4 + param.L5 + 2 * param.L6;\n\t\tconst beamH = param.H1 + param.H2 - param.H4;\n\t\tconst handLowX = R4 * Math.cos(Math.PI / 6);\n\t\tconst handLowY = R4 * Math.sin(Math.PI / 6);\n\t\tconst handHighXint = R5 * Math.cos(Math.PI / 6);\n\t\tconst handHighYint = R5 * Math.sin(Math.PI / 6);\n\t\tconst handHighXext = R8 * Math.cos(Math.PI / 6);\n\t\tconst handHighYext = R8 * Math.sin(Math.PI / 6);\n\t\tconst handPos = [-beamL / 2, -param.L5 / 2 - param.L4, param.L5 / 2, beamL / 2 - param.L4];\n\t\tconst wingLy = param.H2 - param.L8 - param.H4 - R4;\n\t\tif (wingLy < 0) {\n\t\t\tthrow `err140: H2 ${param.H2} too small compare to L8 ${param.L8}, H4 ${param.H4} and D4 ${param.D4}`;\n\t\t}\n\t\tconst coneAngle = Math.atan2(R1 - R2, param.H2);\n\t\trGeome.logstr += `cone-angle: ${ffix(radToDeg(coneAngle))} degree\\n`;\n\t\tconst wingLx = beamL / 2 - param.L7 - R1 + param.L8 * Math.tan(coneAngle);\n\t\tconst wingL = Math.sqrt(wingLx ** 2 + wingLy ** 2);\n\t\tconst wingAngle = Math.atan2(wingLx, wingLy);\n\t\trGeome.logstr += `wing-angle: ${ffix(radToDeg(wingAngle))} degree\\n`;\n\t\tconst wingLPre = param.E1 / Math.sin(wingAngle + coneAngle);\n\t\tconst wingL2 = wingL + param.E4 / Math.cos(wingAngle) + wingLPre;\n\t\tconst wingPosX = R1 - param.L8 * Math.tan(coneAngle) - wingLPre * Math.sin(wingAngle);\n\t\tconst wingPosY = param.H1 + param.L8 - wingLPre * Math.cos(wingAngle);\n\t\tconst wingCPosX = wingPosX - R6 * Math.cos(wingAngle);\n\t\tconst wingCPosY = wingPosY + R6 * Math.sin(wingAngle);\n\t\tconst wingHR = R6 - param.E6;\n\t\tconst wingHPosX = wingPosX - param.E6 * Math.cos(wingAngle);\n\t\tconst wingHPosY = wingPosY + param.E6 * Math.sin(wingAngle);\n\t\tconst wingAngleC = Math.PI / 2 - wingAngle;\n\t\tconst doorLowX = param.L9 / 2;\n\t\tconst doorHighX = doorLowX - param.H7 * Math.tan(coneAngle);\n\t\tif (doorHighX < param.R9) {\n\t\t\tthrow `err177: R9 ${param.R9} too large compare to coneAngle and L9 ${param.L9}`;\n\t\t}\n\t\tif (param.L9 > param.D1) {\n\t\t\tthrow `err180: L9 ${param.L9} too large compare to D1 ${param.D1}`;\n\t\t}\n\t\t// figCone\n\t\tconst coneSlopeX = param.E1 * Math.cos(coneAngle);\n\t\tconst coneSlopeY = param.E1 * Math.sin(coneAngle);\n\t\tconst coneFC = param.E1 * Math.tan(coneAngle / 2);\n\t\tctrCone = function (orient: number): tContour {\n\t\t\tconst rCtr = contour(orient * R1, 0)\n\t\t\t\t.addSegStrokeA(orient * R1, param.H1)\n\t\t\t\t.addSegStrokeA(orient * R2, H1H2)\n\t\t\t\t.addSegStrokeA(orient * (R2 - coneSlopeX), H1H2 - coneSlopeY)\n\t\t\t\t.addSegStrokeA(orient * (R1 - param.E1), param.H1 - coneFC)\n\t\t\t\t.addSegStrokeA(orient * (R1 - param.E1), 0)\n\t\t\t\t.closeSegStroke();\n\t\t\treturn rCtr;\n\t\t};\n\t\tctrConePlus = function (orient: number): tContour {\n\t\t\tconst rCtr = contour(orient * R1, 0)\n\t\t\t\t.addSegStrokeA(orient * R1, param.H1)\n\t\t\t\t.addSegStrokeA(orient * R2, H1H2)\n\t\t\t\t.addSegStrokeA(orient * (R2 - coneSlopeX), H1H2 - coneSlopeY)\n\t\t\t\t.addSegStrokeA(orient * (R1 - param.E1), param.H1 - coneFC)\n\t\t\t\t.addSegStrokeA(orient * (R1 - param.E1), param.H1 - param.H3)\n\t\t\t\t.addSegStrokeA(orient * R3, param.H1 - param.H3)\n\t\t\t\t.addSegStrokeA(orient * R3, param.H1 - param.H3 - param.E3)\n\t\t\t\t.addSegStrokeA(orient * (R1 - param.E1), param.H1 - param.H3 - param.E3)\n\t\t\t\t.addSegStrokeA(orient * (R1 - param.E1), 0)\n\t\t\t\t.closeSegStroke();\n\t\t\treturn rCtr;\n\t\t};\n\t\tctrRect = function (\n\t\t\twidth: number,\n\t\t\theight: number,\n\t\t\txpos: number,\n\t\t\typos: number,\n\t\t\tangle: number\n\t\t): tContour {\n\t\t\tconst xWidth = width * Math.cos(angle);\n\t\t\tconst yWidth = width * Math.sin(angle);\n\t\t\tconst xHeight = -height * Math.sin(angle);\n\t\t\tconst yHeight = height * Math.cos(angle);\n\t\t\tconst rCtr = contour(xpos, ypos)\n\t\t\t\t.addSegStrokeA(xpos + xWidth, ypos + yWidth)\n\t\t\t\t.addSegStrokeA(xpos + xWidth + xHeight, ypos + yWidth + yHeight)\n\t\t\t\t.addSegStrokeA(xpos + xHeight, ypos + yHeight)\n\t\t\t\t.closeSegStroke();\n\t\t\treturn rCtr;\n\t\t};\n\t\tconst ctrDoor = contour(doorLowX, param.H1 + param.H6)\n\t\t\t.addCornerRounded(param.R9)\n\t\t\t.addSegStrokeA(doorHighX, param.H1 + param.H6 + param.H7)\n\t\t\t.addCornerRounded(param.R9)\n\t\t\t.addSegStrokeA(-doorHighX, param.H1 + param.H6 + param.H7)\n\t\t\t.addCornerRounded(param.R9)\n\t\t\t.addSegStrokeA(-doorLowX, param.H1 + param.H6)\n\t\t\t.addCornerRounded(param.R9)\n\t\t\t.closeSegStroke();\n\t\tfigCone.addMain(ctrCone(1));\n\t\tfigCone.addSecond(ctrConePlus(1));\n\t\tfigCone.addSecond(ctrConePlus(-1));\n\t\t//figCone.addSecond(contourCircle(0, beamH, R4));\n\t\t//figCone.addSecond(contourCircle(0, beamH, R4 - param.E4));\n\t\tfigCone.addSecond(ctrRect(beamL, param.D4, -beamL / 2, beamH - R4, 0)); // beam-ext\n\t\tfigCone.addSecond(\n\t\t\tctrRect(beamL, param.D4 - 2 * param.E4, -beamL / 2, beamH - R4 + param.E4, 0)\n\t\t); // beam-int\n\t\tfor (const posX of handPos) {\n\t\t\tfigCone.addSecond(\n\t\t\t\tctrRect(param.L4, param.H5 - handLowY - handHighYint, posX, beamH + handLowY, 0)\n\t\t\t);\n\t\t}\n\t\tfigCone.addSecond(ctrRect(wingL2, 2 * R6, wingPosX, wingPosY, wingAngleC)); // wing-right\n\t\tfigCone.addSecond(ctrRect(wingL2, 2 * wingHR, wingHPosX, wingHPosY, wingAngleC));\n\t\tfigCone.addSecond(ctrRect(2 * R6, wingL2, -wingPosX, wingPosY, wingAngle)); // wing-left\n\t\tfigCone.addSecond(ctrRect(2 * wingHR, wingL2, -wingHPosX, wingHPosY, wingAngle));\n\t\tfigCone.addSecond(ctrDoor);\n\t\t// figBeam\n\t\tconst ctrHand = contour(handLowX, beamH + handLowY)\n\t\t\t.addSegStrokeA(handHighXext, beamH + param.H5 - handHighYext)\n\t\t\t.addSegStrokeA(handHighXint, beamH + param.H5 - handHighYint)\n\t\t\t.addPointA(-handHighXint, beamH + param.H5 - handHighYint)\n\t\t\t.addSegArc(R5, false, false)\n\t\t\t.addSegStrokeA(-handHighXext, beamH + param.H5 - handHighYext)\n\t\t\t.addSegStrokeA(-handLowX, beamH + handLowY)\n\t\t\t.closeSegArc(R4, false, false);\n\t\tfigBeam.addMain(contourCircle(0, beamH, R4));\n\t\tfigBeam.addMain(contourCircle(0, beamH, R4 - param.E4));\n\t\tfigBeam.addSecond(ctrConePlus(1));\n\t\tfigBeam.addSecond(ctrConePlus(-1));\n\t\tfigBeam.addSecond(ctrHand);\n\t\tfigBeam.addSecond(contourCircle(0, beamH + param.H5, R5));\n\t\tfigBeam.addSecond(ctrRect(2 * R6, wingLy, -R6, param.H1 + param.L8, 0)); // wing\n\t\tfigBeam.addSecond(ctrRect(2 * wingHR, wingLy, -wingHR, param.H1 + param.L8, 0));\n\t\tfigBeam.addSecond(ctrDoor);\n\t\t// figBeamHollow\n\t\tfigBeamHollow.addMain(contourCircle(0, beamH, R4 - param.E4));\n\t\tfigBeamHollow.addSecond(contourCircle(0, beamH, R4));\n\t\tfigBeamHollow.addSecond(ctrHand);\n\t\t// figDisc\n\t\tfigDisc.addMain(contourCircle(0, 0, R1));\n\t\tfigDisc.addMain(contourCircle(0, 0, R3));\n\t\tconst posR = R3 + param.L1;\n\t\tconst posA = (2 * Math.PI) / param.N1;\n\t\tfor (let i = 0; i < param.N1; i++) {\n\t\t\tconst posX = posR * Math.cos(i * posA);\n\t\t\tconst posY = posR * Math.sin(i * posA);\n\t\t\tfigDisc.addMain(contourCircle(posX, posY, R7));\n\t\t}\n\t\tfigDisc.addSecond(contourCircle(0, 0, R1 - param.E1));\n\t\tfigDisc.addSecond(contourCircle(0, 0, R2));\n\t\tfigDisc.addSecond(ctrRect(param.D4, beamL, -R4, -beamL / 2, 0)); // beam-ext\n\t\tfigDisc.addSecond(ctrRect(param.D4 - 2 * param.E4, beamL, -R4 + param.E4, -beamL / 2, 0)); // beam-int\n\t\tfor (const posX of handPos) {\n\t\t\tfigDisc.addSecond(ctrRect(2 * handLowX, param.L4, -handLowX, posX, 0));\n\t\t\tfigDisc.addSecond(ctrRect(2 * handHighXint, param.L4, -handHighXint, posX, 0));\n\t\t\tfigDisc.addSecond(ctrRect(2 * handHighXext, param.L4, -handHighXext, posX, 0));\n\t\t}\n\t\tfigDisc.addSecond(ctrRect(2 * R6, wingLx, -R6, R1 - param.L8 * Math.tan(coneAngle), 0)); // wing-right\n\t\tfigDisc.addSecond(\n\t\t\tctrRect(2 * wingHR, wingLx, -wingHR, R1 - param.L8 * Math.tan(coneAngle), 0)\n\t\t);\n\t\tfigDisc.addSecond(\n\t\t\tctrRect(2 * R6, wingLx, -R6, -R1 + param.L8 * Math.tan(coneAngle) - wingLx, 0)\n\t\t); // wing-left\n\t\tfigDisc.addSecond(\n\t\t\tctrRect(2 * wingHR, wingLx, -wingHR, -R1 + param.L8 * Math.tan(coneAngle) - wingLx, 0)\n\t\t);\n\t\t// figHand\n\t\tfigHand.addMain(ctrHand);\n\t\tfigHand.addSecond(contourCircle(0, beamH, R4));\n\t\tfigHand.addSecond(contourCircle(0, beamH, R4 - param.E4));\n\t\tfigHand.addSecond(contourCircle(0, beamH + param.H5, R5));\n\t\t// figWing\n\t\tfigWing.addMain(contourCircle(0, 0, R6));\n\t\tfigWing.addMain(contourCircle(0, 0, wingHR));\n\t\t// figWingHollow\n\t\tfigWingHollow.addSecond(contourCircle(0, 0, R6));\n\t\tfigWingHollow.addMain(contourCircle(0, 0, wingHR));\n\t\t// figDoor\n\t\tfigDoor.addMain(ctrDoor);\n\t\tfigDoor.addSecond(ctrConePlus(1));\n\t\tfigDoor.addSecond(ctrConePlus(-1));\n\t\tfigDoor.addSecond(ctrRect(beamL, param.D4, -beamL / 2, beamH - R4, 0)); // beam-ext\n\t\tfigDoor.addSecond(\n\t\t\tctrRect(beamL, param.D4 - 2 * param.E4, -beamL / 2, beamH - R4 + param.E4, 0)\n\t\t); // beam-int\n\t\tfor (const posX of handPos) {\n\t\t\tfigDoor.addSecond(\n\t\t\t\tctrRect(param.L4, param.H5 - handLowY - handHighYint, posX, beamH + handLowY, 0)\n\t\t\t);\n\t\t}\n\t\tfigDoor.addSecond(ctrRect(wingL2, 2 * R6, wingPosX, wingPosY, wingAngleC)); // wing-right\n\t\tfigDoor.addSecond(ctrRect(wingL2, 2 * wingHR, wingHPosX, wingHPosY, wingAngleC));\n\t\tfigDoor.addSecond(ctrRect(2 * R6, wingL2, -wingPosX, wingPosY, wingAngle)); // wing-left\n\t\tfigDoor.addSecond(ctrRect(2 * wingHR, wingL2, -wingHPosX, wingHPosY, wingAngle));\n\t\t// final figure list\n\t\trGeome.fig = {\n\t\t\tfaceCone: figCone,\n\t\t\tfaceBeam: figBeam,\n\t\t\tfaceBeamHollow: figBeamHollow,\n\t\t\tfaceDisc: figDisc,\n\t\t\tfaceHand: figHand,\n\t\t\tfaceWing: figWing,\n\t\t\tfaceWingHollow: figWingHollow,\n\t\t\tfaceDoor: figDoor\n\t\t};\n\t\tconst designName = rGeome.partName;\n\t\tconst preExtrude = handPos.map((posX, idx) => {\n\t\t\tconst rHand: tExtrude = {\n\t\t\t\toutName: `subpax_${designName}_hand_${idx}`,\n\t\t\t\tface: `${designName}_faceHand`,\n\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\tlength: param.L4,\n\t\t\t\trotate: [Math.PI / 2, 0, 0],\n\t\t\t\ttranslate: [0, -posX, 0]\n\t\t\t};\n\t\t\treturn rHand;\n\t\t});\n\t\trGeome.vol = {\n\t\t\textrudes: [\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_cone`,\n\t\t\t\t\tface: `${designName}_faceCone`,\n\t\t\t\t\textrudeMethod: EExtrude.eRotate,\n\t\t\t\t\trotate: [0, 0, 0],\n\t\t\t\t\ttranslate: [0, 0, 0]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_beam`,\n\t\t\t\t\tface: `${designName}_faceBeam`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: beamL,\n\t\t\t\t\trotate: [Math.PI / 2, 0, 0],\n\t\t\t\t\ttranslate: [0, beamL / 2, 0]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_beamHollow`,\n\t\t\t\t\tface: `${designName}_faceBeamHollow`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: beamL,\n\t\t\t\t\trotate: [Math.PI / 2, 0, 0],\n\t\t\t\t\ttranslate: [0, beamL / 2, 0]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_disc`,\n\t\t\t\t\tface: `${designName}_faceDisc`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: param.E3,\n\t\t\t\t\trotate: [0, 0, 0],\n\t\t\t\t\ttranslate: [0, 0, param.H1 - param.H3 - param.E3]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_wing_right`,\n\t\t\t\t\tface: `${designName}_faceWing`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: wingL2,\n\t\t\t\t\trotate: [-wingAngle, 0, 0],\n\t\t\t\t\ttranslate: [0, wingCPosX, wingCPosY]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_wing_left`,\n\t\t\t\t\tface: `${designName}_faceWing`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: wingL2,\n\t\t\t\t\trotate: [wingAngle, 0, 0],\n\t\t\t\t\ttranslate: [0, -wingCPosX, wingCPosY]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_wing_hollow_right`,\n\t\t\t\t\tface: `${designName}_faceWingHollow`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: wingL2,\n\t\t\t\t\trotate: [-wingAngle, 0, 0],\n\t\t\t\t\ttranslate: [0, wingCPosX, wingCPosY]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_wing_hollow_left`,\n\t\t\t\t\tface: `${designName}_faceWingHollow`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: wingL2,\n\t\t\t\t\trotate: [wingAngle, 0, 0],\n\t\t\t\t\ttranslate: [0, -wingCPosX, wingCPosY]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_door`,\n\t\t\t\t\tface: `${designName}_faceDoor`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: param.D1,\n\t\t\t\t\trotate: [Math.PI / 2, 0, Math.PI / 2],\n\t\t\t\t\ttranslate: [0, 0, 0]\n\t\t\t\t},\n\t\t\t\t...preExtrude\n\t\t\t],\n\t\t\tvolumes: [\n\t\t\t\t{\n\t\t\t\t\toutName: `ipax_${designName}_plus`,\n\t\t\t\t\tboolMethod: EBVolume.eUnion,\n\t\t\t\t\tinList: [\n\t\t\t\t\t\t`subpax_${designName}_cone`,\n\t\t\t\t\t\t`subpax_${designName}_beam`,\n\t\t\t\t\t\t`subpax_${designName}_disc`,\n\t\t\t\t\t\t`subpax_${designName}_hand_0`,\n\t\t\t\t\t\t`subpax_${designName}_hand_1`,\n\t\t\t\t\t\t`subpax_${designName}_hand_2`,\n\t\t\t\t\t\t`subpax_${designName}_hand_3`,\n\t\t\t\t\t\t`subpax_${designName}_wing_right`,\n\t\t\t\t\t\t`subpax_${designName}_wing_left`\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `ipax_${designName}_hollow`,\n\t\t\t\t\tboolMethod: EBVolume.eUnion,\n\t\t\t\t\tinList: [\n\t\t\t\t\t\t`subpax_${designName}_beamHollow`,\n\t\t\t\t\t\t`subpax_${designName}_wing_hollow_right`,\n\t\t\t\t\t\t`subpax_${designName}_wing_hollow_left`,\n\t\t\t\t\t\t`subpax_${designName}_door`\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `pax_${designName}`,\n\t\t\t\t\tboolMethod: EBVolume.eSubstraction,\n\t\t\t\t\tinList: [`ipax_${designName}_plus`, `ipax_${designName}_hollow`]\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t\t// sub-design\n\t\trGeome.sub = {};\n\t\t// finalize\n\t\trGeome.logstr += 'heliostat-rake draw successfully!\\n';\n\t\trGeome.calcErr = false;\n\t} catch (emsg) {\n\t\trGeome.logstr += emsg as string;\n\t\tconsole.log(emsg as string);\n\t}\n\treturn rGeome;\n}\n\nconst rakeDef: tPageDef = {\n\tpTitle: 'Heliostat rake',\n\tpDescription: 'The rake on top of the pole-rotor of the heliostat',\n\tpDef: pDef,\n\tpGeom: pGeom\n};\n\nexport { rakeDef };\n","// spider.ts\n\nimport type {\n\ttContour,\n\ttParamDef,\n\ttParamVal,\n\ttGeom,\n\ttExtrude,\n\ttPageDef\n\t//tSubInst\n\t//tSubDesign\n} from 'geometrix';\nimport {\n\tcontour,\n\tcontourCircle,\n\tfigure,\n\t//degToRad,\n\tradToDeg,\n\tffix,\n\tpNumber,\n\t//pCheckbox,\n\t//pDropdown,\n\tinitGeom,\n\tEExtrude,\n\tEBVolume\n} from 'geometrix';\n\nconst pDef: tParamDef = {\n\tpartName: 'spider',\n\tparams: [\n\t\t//pNumber(name, unit, init, min, max, step)\n\t\tpNumber('D1', 'mm', 100, 10, 400, 1),\n\t\tpNumber('L1', 'mm', 400, 100, 1000, 10),\n\t\tpNumber('L2', 'mm', 400, 100, 1000, 10),\n\t\tpNumber('L3', 'mm', 100, 10, 400, 1),\n\t\tpNumber('L4', 'mm', 3000, 500, 8000, 10),\n\t\tpNumber('L5', 'mm', 2000, 100, 8000, 10),\n\t\tpNumber('L6', 'mm', 30, 1, 100, 1),\n\t\tpNumber('E1', 'mm', 3, 1, 80, 1),\n\t\tpNumber('E2', 'mm', 50, 1, 200, 1),\n\t\tpNumber('E3', 'mm', 3, 1, 80, 1),\n\t\tpNumber('R2', 'mm', 100, 0, 400, 10),\n\t\tpNumber('N1', '', 6, 1, 20, 1)\n\t],\n\tparamSvg: {\n\t\tD1: 'spider_profile.svg',\n\t\tL1: 'spider_profile.svg',\n\t\tL2: 'spider_profile.svg',\n\t\tL3: 'spider_profile.svg',\n\t\tL4: 'spider_profile.svg',\n\t\tL5: 'spider_lateral.svg',\n\t\tL6: 'spider_lateral.svg',\n\t\tE1: 'spider_profile.svg',\n\t\tE2: 'spider_profile.svg',\n\t\tE3: 'spider_profile.svg',\n\t\tR2: 'spider_profile.svg',\n\t\tN1: 'spider_lateral.svg'\n\t},\n\tsim: {\n\t\ttMax: 360,\n\t\ttStep: 0.5,\n\t\ttUpdate: 500 // every 0.5 second\n\t}\n};\n\ntype tCtr1 = (sx: number, sy: number, sl: number) => tContour;\ntype tCtr2 = (width: number, height: number, xpos: number, ypos: number) => tContour;\n\nfunction pGeom(t: number, param: tParamVal): tGeom {\n\tlet ctrSquare: tCtr1;\n\tlet ctrRect: tCtr2;\n\tconst rGeome = initGeom(pDef.partName);\n\tconst figLegs = figure();\n\tconst figTube = figure();\n\tconst figBody = figure();\n\trGeome.logstr += `${rGeome.partName} simTime: ${t}\\n`;\n\ttry {\n\t\tconst R1 = param.D1 / 2;\n\t\tif (param.D1 < param.E2) {\n\t\t\tthrow `err476: D1 ${param.D1} smaller then E2 ${param.E2}`;\n\t\t}\n\t\tconst legE2 = param.E2 / 2;\n\t\tconst legStartY = Math.sqrt(R1 ** 2 - legE2 ** 2);\n\t\tconst legL2 = param.L1 + param.L2 * Math.sqrt(2);\n\t\tconst legL3 = param.L2 + param.L1 * Math.sqrt(2);\n\t\tconst legL4 = param.L4 - legL3;\n\t\tif (legL4 < param.R2) {\n\t\t\tthrow `err984: L4 ${param.L4} too small compare to R2 ${param.R2}`;\n\t\t}\n\t\tconst legL4x = legL4 * Math.cos(Math.PI / 4);\n\t\tconst legL4y = legL4 * Math.sin(Math.PI / 4);\n\t\tconst E2x = param.E2 * Math.cos(Math.PI / 4);\n\t\tconst E2y = param.E2 * Math.sin(Math.PI / 4);\n\t\tconst elbowx = param.E2 * Math.tan(Math.PI / 8);\n\t\tif (R1 < param.E1) {\n\t\t\tthrow `err092: D1 ${param.D1} too small compare to E1 ${param.E1}`;\n\t\t}\n\t\tif (param.L3 < param.E2) {\n\t\t\tthrow `err994: L3 ${param.L3} smaller than E2 ${param.E2}`;\n\t\t}\n\t\tif (param.L3 < 2 * param.E3) {\n\t\t\tthrow `err997: L3 ${param.L3} too small compare to E3 ${param.E3}`;\n\t\t}\n\t\tconst squareD = ((param.L3 - param.E2) / 2) * Math.cos(Math.PI / 4);\n\t\tconst squareX = legL2 + legL4x + squareD;\n\t\tconst squareY = -param.L1 - legL4y + squareD;\n\t\tconst squareY2 = squareY - param.E3 * Math.sqrt(2);\n\t\tif (param.L5 < param.N1 * param.L6) {\n\t\t\tthrow `err110: L5 ${param.L5} too small compare to N1 ${param.N1} and L6 ${param.L6}`;\n\t\t}\n\t\tlet legStep = 1;\n\t\tif (param.N1 > 1) {\n\t\t\tlegStep = (param.L5 - param.L6) / (param.N1 - 1);\n\t\t}\n\t\tconst legPos = [...Array(param.N1).keys()].map((i) => i * legStep);\n\t\tctrSquare = function (sx: number, sy: number, sl: number): tContour {\n\t\t\tconst rCtr = contour(sx, sy)\n\t\t\t\t.addSegStrokeA(sx + sl * Math.cos(Math.PI / 4), sy - sl * Math.sin(Math.PI / 4))\n\t\t\t\t.addSegStrokeA(sx, sy - 2 * sl * Math.sin(Math.PI / 4))\n\t\t\t\t.addSegStrokeA(sx - sl * Math.cos(Math.PI / 4), sy - sl * Math.sin(Math.PI / 4))\n\t\t\t\t.closeSegStroke();\n\t\t\treturn rCtr;\n\t\t};\n\t\tctrRect = function (width: number, height: number, xpos: number, ypos: number): tContour {\n\t\t\tconst rCtr = contour(xpos, ypos)\n\t\t\t\t.addSegStrokeA(xpos + width, ypos)\n\t\t\t\t.addSegStrokeA(xpos + width, ypos + height)\n\t\t\t\t.addSegStrokeA(xpos, ypos + height)\n\t\t\t\t.closeSegStroke();\n\t\t\treturn rCtr;\n\t\t};\n\t\tconst posAngle = (Math.sin((2 * Math.PI * t) / pDef.sim.tMax) * Math.PI) / 2;\n\t\trGeome.logstr += `spide leg number: ${param.N1}\\n`;\n\t\trGeome.logstr += `spide position angle: ${ffix(radToDeg(posAngle))} degree\\n`;\n\t\t// figLegs\n\t\tconst ctrLeg = contour(legE2, -legStartY)\n\t\t\t.addCornerRounded(param.R2)\n\t\t\t.addSegStrokeA(legE2, -param.L1)\n\t\t\t.addCornerRounded(param.R2)\n\t\t\t.addSegStrokeA(legL2, -param.L1)\n\t\t\t.addCornerRounded(param.R2 + param.E2)\n\t\t\t.addSegStrokeA(legL2 + legL4x, -param.L1 - legL4y)\n\t\t\t.addSegStrokeA(legL2 + legL4x - E2x, -param.L1 - legL4y - E2y)\n\t\t\t.addSegStrokeA(legL2 - elbowx, -param.L1 - param.E2)\n\t\t\t.addCornerRounded(param.R2)\n\t\t\t.addSegStrokeA(-legL2 + elbowx, -param.L1 - param.E2)\n\t\t\t.addCornerRounded(param.R2)\n\t\t\t.addSegStrokeA(-legL2 - legL4x + E2x, -param.L1 - legL4y - E2y)\n\t\t\t.addSegStrokeA(-legL2 - legL4x, -param.L1 - legL4y)\n\t\t\t.addSegStrokeA(-legL2, -param.L1)\n\t\t\t.addCornerRounded(param.R2 + param.E2)\n\t\t\t.addSegStrokeA(-legE2, -param.L1)\n\t\t\t.addCornerRounded(param.R2)\n\t\t\t.addSegStrokeA(-legE2, -legStartY)\n\t\t\t.addCornerRounded(param.R2)\n\t\t\t.closeSegArc(R1, true, false);\n\t\tfigLegs.addMain(ctrLeg);\n\t\tfigLegs.addMain(contourCircle(0, 0, R1 - param.E1));\n\t\tfigLegs.addSecond(ctrSquare(squareX, squareY, param.L3));\n\t\tfigLegs.addSecond(ctrSquare(squareX, squareY2, param.L3 - 2 * param.E3));\n\t\tfigLegs.addSecond(ctrSquare(-squareX, squareY, param.L3));\n\t\tfigLegs.addSecond(ctrSquare(-squareX, squareY2, param.L3 - 2 * param.E3));\n\t\t// figTube\n\t\tfigTube.addMain(contourCircle(0, 0, R1));\n\t\tfigTube.addMain(contourCircle(0, 0, R1 - param.E1));\n\t\tfigTube.addMain(ctrSquare(squareX, squareY, param.L3));\n\t\tfigTube.addMain(ctrSquare(squareX, squareY2, param.L3 - 2 * param.E3));\n\t\tfigTube.addMain(ctrSquare(-squareX, squareY, param.L3));\n\t\tfigTube.addMain(ctrSquare(-squareX, squareY2, param.L3 - 2 * param.E3));\n\t\tfigTube.addSecond(ctrLeg);\n\t\t// figBody\n\t\tfigBody.addSecond(ctrRect(param.L5, param.D1, 0, -param.D1 / 2));\n\t\tfigBody.addSecond(ctrRect(param.L5, param.L3, 0, -param.L4 - param.L3));\n\t\tfor (const posx of legPos) {\n\t\t\tfigBody.addSecond(ctrRect(param.L6, param.L4, posx, -param.L4));\n\t\t}\n\t\t// final figure list\n\t\trGeome.fig = {\n\t\t\tfaceLegs: figLegs.rotate(0, 0, posAngle),\n\t\t\tfaceTube: figTube.rotate(0, 0, posAngle),\n\t\t\tfaceBody: figBody\n\t\t};\n\t\tconst designName = rGeome.partName;\n\t\tconst preExtrude = legPos.map((posX, idx) => {\n\t\t\tconst rElem: tExtrude = {\n\t\t\t\toutName: `subpax_${designName}_leg_${idx}`,\n\t\t\t\tface: `${designName}_faceLegs`,\n\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\tlength: param.L6,\n\t\t\t\trotate: [0, 0, 0],\n\t\t\t\ttranslate: [0, 0, posX]\n\t\t\t};\n\t\t\treturn rElem;\n\t\t});\n\t\tconst legList = legPos.map((elem, idx) => {\n\t\t\tconst subElem = `subpax_${designName}_leg_${idx}`;\n\t\t\treturn subElem;\n\t\t});\n\t\trGeome.vol = {\n\t\t\textrudes: [\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_tube`,\n\t\t\t\t\tface: `${designName}_faceTube`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: param.L5,\n\t\t\t\t\trotate: [0, 0, 0],\n\t\t\t\t\ttranslate: [0, 0, 0]\n\t\t\t\t},\n\t\t\t\t...preExtrude\n\t\t\t],\n\t\t\tvolumes: [\n\t\t\t\t{\n\t\t\t\t\toutName: `pax_${designName}`,\n\t\t\t\t\tboolMethod: EBVolume.eUnion,\n\t\t\t\t\tinList: [`subpax_${designName}_tube`, ...legList]\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t\t// sub-design\n\t\trGeome.sub = {};\n\t\t// finalize\n\t\trGeome.logstr += 'heliostat-spider draw successfully!\\n';\n\t\trGeome.calcErr = false;\n\t} catch (emsg) {\n\t\trGeome.logstr += emsg as string;\n\t\tconsole.log(emsg as string);\n\t}\n\treturn rGeome;\n}\n\nconst spiderDef: tPageDef = {\n\tpTitle: 'Heliostat spider',\n\tpDescription: 'The spider part for the control of the inclination of the heliostat',\n\tpDef: pDef,\n\tpGeom: pGeom\n};\n\nexport { spiderDef };\n","// swing.ts\n\nimport type {\n\ttContour,\n\ttParamDef,\n\ttParamVal,\n\ttGeom,\n\ttPageDef\n\t//tSubInst\n\t//tSubDesign\n} from 'geometrix';\nimport {\n\tcontour,\n\tcontourCircle,\n\tfigure,\n\t//degToRad,\n\t//radToDeg,\n\tffix,\n\tpNumber,\n\t//pCheckbox,\n\t//pDropdown,\n\tinitGeom,\n\tEExtrude,\n\tEBVolume\n} from 'geometrix';\n\nconst pDef: tParamDef = {\n\tpartName: 'swing',\n\tparams: [\n\t\t//pNumber(name, unit, init, min, max, step)\n\t\tpNumber('L1', 'mm', 12500, 1000, 40000, 10),\n\t\tpNumber('L2', 'mm', 6000, 1000, 40000, 10),\n\t\tpNumber('L3', 'mm', 500, 100, 4000, 10),\n\t\tpNumber('L4', 'mm', 600, 100, 4000, 10),\n\t\tpNumber('L5', 'mm', 2000, 100, 10000, 10),\n\t\tpNumber('L6', 'mm', 2000, 100, 10000, 10),\n\t\tpNumber('D1', 'mm', 400, 50, 1000, 1),\n\t\tpNumber('H1', 'mm', 100, 10, 400, 1),\n\t\tpNumber('H2', 'mm', 100, 10, 400, 1),\n\t\tpNumber('H3', 'mm', 100, 10, 400, 1),\n\t\tpNumber('H4', 'mm', 100, 10, 400, 1),\n\t\tpNumber('E1', 'mm', 5, 1, 80, 1),\n\t\tpNumber('E2', 'mm', 3, 1, 80, 1),\n\t\tpNumber('E3', 'mm', 3, 1, 80, 1),\n\t\tpNumber('rod1', '', 10, 1, 40, 1),\n\t\tpNumber('rod2', 'mm', 1300, 100, 4000, 10),\n\t\tpNumber('rod3', 'mm', 400, 50, 1000, 10),\n\t\tpNumber('rod4', 'mm', 100, 50, 400, 10)\n\t],\n\tparamSvg: {\n\t\tL1: 'swing_top.svg',\n\t\tL2: 'swing_top.svg',\n\t\tL3: 'swing_top.svg',\n\t\tL4: 'swing_top.svg',\n\t\tL5: 'swing_top.svg',\n\t\tL6: 'swing_top.svg',\n\t\tD1: 'swing_top.svg',\n\t\tH1: 'swing_top.svg',\n\t\tH2: 'swing_top.svg',\n\t\tH3: 'swing_side.svg',\n\t\tH4: 'swing_side.svg',\n\t\tE1: 'swing_side.svg',\n\t\tE2: 'swing_side.svg',\n\t\tE3: 'swing_face.svg',\n\t\trod1: 'swing_with_rod.svg',\n\t\trod2: 'swing_with_rod.svg',\n\t\trod3: 'swing_with_rod.svg',\n\t\trod4: 'swing_with_rod.svg'\n\t},\n\tsim: {\n\t\ttMax: 180,\n\t\ttStep: 0.5,\n\t\ttUpdate: 500 // every 0.5 second\n\t}\n};\n\ntype tCtr1 = (px: number, py: number, lx: number, ly: number) => tContour;\ntype tCtr2 = (px: number, py: number, lx: number, ly: number, round: number) => tContour;\n\nfunction pGeom(t: number, param: tParamVal): tGeom {\n\tlet ctrRectangle: tCtr1;\n\tlet ctrRectRound: tCtr2;\n\tconst rGeome = initGeom(pDef.partName);\n\tconst figSide = figure();\n\tconst figFace = figure();\n\tconst figTop = figure();\n\tconst figTopWithRod = figure();\n\trGeome.logstr += `${rGeome.partName} simTime: ${t}\\n`;\n\ttry {\n\t\tconst R1 = param.D1 / 2;\n\t\trGeome.logstr += `swing size: L1 ${ffix(param.L1)} x L2 ${ffix(param.L2)} mm\\n`;\n\t\tctrRectangle = function (px: number, py: number, lx: number, ly: number): tContour {\n\t\t\tconst rRect = contour(px, py)\n\t\t\t\t.addSegStrokeA(px + lx, py)\n\t\t\t\t.addSegStrokeA(px + lx, py + ly)\n\t\t\t\t.addSegStrokeA(px, py + ly)\n\t\t\t\t.closeSegStroke();\n\t\t\treturn rRect;\n\t\t};\n\t\tctrRectRound = function (\n\t\t\tpx: number,\n\t\t\tpy: number,\n\t\t\tlx: number,\n\t\t\tly: number,\n\t\t\tround: number\n\t\t): tContour {\n\t\t\tconst rRect = contour(px, py)\n\t\t\t\t.addCornerRounded(round)\n\t\t\t\t.addSegStrokeA(px + lx, py)\n\t\t\t\t.addCornerRounded(round)\n\t\t\t\t.addSegStrokeA(px + lx, py + ly)\n\t\t\t\t.addCornerRounded(round)\n\t\t\t\t.addSegStrokeA(px, py + ly)\n\t\t\t\t.addCornerRounded(round)\n\t\t\t\t.closeSegStroke();\n\t\t\treturn rRect;\n\t\t};\n\t\t// figSide\n\t\tfigSide.addMain(contourCircle(0, 0, R1));\n\t\tfigSide.addMain(contourCircle(0, 0, R1 - param.E1));\n\t\tconst sidePx = [-param.L2 / 2, -param.L3 - param.H2, param.L3, param.L2 / 2 - param.H2];\n\t\tfor (const px of sidePx) {\n\t\t\tfigSide.addMain(ctrRectangle(px, R1 - param.H4, param.H2, param.H4));\n\t\t\tfigSide.addMain(\n\t\t\t\tctrRectangle(\n\t\t\t\t\tpx + param.E2,\n\t\t\t\t\tR1 - param.H4 + param.E2,\n\t\t\t\t\tparam.H2 - 2 * param.E2,\n\t\t\t\t\tparam.H4 - 2 * param.E2\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t\tfigSide.addSecond(ctrRectangle(-param.L2 / 2, R1, param.L2, param.H3));\n\t\t// figFace\n\t\tconst facePx: number[] = [];\n\t\tfacePx.push(-param.L1 / 2);\n\t\tfacePx.push(param.L1 / 2 - param.H1);\n\t\tfor (const px of [\n\t\t\t-param.L5 / 2 - 2 * param.L4 - param.L6,\n\t\t\t-param.L5 / 2 - param.L4,\n\t\t\tparam.L5 / 2,\n\t\t\tparam.L5 / 2 + param.L4 + param.L6\n\t\t]) {\n\t\t\tfor (const pxp of [0, param.L4 - param.H1]) {\n\t\t\t\tfacePx.push(px + pxp);\n\t\t\t}\n\t\t}\n\t\tfor (const px of facePx) {\n\t\t\tfigFace.addMain(ctrRectangle(px, R1, param.H1, param.H3));\n\t\t\tfigFace.addMain(\n\t\t\t\tctrRectangle(\n\t\t\t\t\tpx + param.E3,\n\t\t\t\t\tR1 + param.E3,\n\t\t\t\t\tparam.H1 - 2 * param.E3,\n\t\t\t\t\tparam.H3 - 2 * param.E3\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t\tfigFace.addSecond(ctrRectangle(-param.L1 / 2, -R1, param.L1, param.D1));\n\t\tfigFace.addSecond(ctrRectangle(-param.L1 / 2, R1 - param.H4, param.L1, param.H4));\n\t\t// figTop\n\t\tfor (const px of facePx) {\n\t\t\tfigTop.addSecond(ctrRectangle(px, -param.L2 / 2, param.H1, param.L2));\n\t\t}\n\t\tfor (const py of sidePx) {\n\t\t\tfigTop.addSecond(ctrRectangle(-param.L1 / 2, py, param.L1, param.H2));\n\t\t}\n\t\tfigTop.addSecond(ctrRectangle(-param.L1 / 2, -R1, param.L1, param.D1));\n\t\t// figTopWithRod\n\t\tfor (const px of facePx) {\n\t\t\tfigTopWithRod.addMain(ctrRectangle(px, -param.L2 / 2, param.H1, param.L2));\n\t\t}\n\t\tfor (const py of sidePx) {\n\t\t\tfigTopWithRod.addMain(ctrRectangle(-param.L1 / 2, py, param.L1, param.H2));\n\t\t}\n\t\tfigTopWithRod.addMain(ctrRectangle(-param.L1 / 2, -R1, param.L1, param.D1));\n\t\tconst rodPx0 = -((param.rod1 - 1) * param.rod2 + param.rod3) / 2;\n\t\tconst rodOffset = (param.rod3 - param.rod4) / 2;\n\t\tconst rodPlateH = param.rod3 / 2;\n\t\tconst rodLength = 1.2 * param.L2;\n\t\tconst rodPyStep = (rodLength - rodPlateH) / (4 - 1);\n\t\tconst rodPy0 = -rodLength / 2;\n\t\tfor (let i = 0; i < param.rod1; i++) {\n\t\t\tconst px = rodPx0 + i * param.rod2;\n\t\t\tfigTopWithRod.addSecond(ctrRectangle(px + rodOffset, rodPy0, param.rod4, rodLength));\n\t\t\tfor (let j = 0; j < 4; j++) {\n\t\t\t\tfigTopWithRod.addSecond(\n\t\t\t\t\tctrRectRound(px, rodPy0 + j * rodPyStep, param.rod3, rodPlateH, rodPlateH / 4)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\t// final figure list\n\t\trGeome.fig = {\n\t\t\tfaceSide: figSide,\n\t\t\tfaceFace: figFace,\n\t\t\tfaceTop: figTop,\n\t\t\tfaceTopWithRods: figTopWithRod\n\t\t};\n\t\tconst designName = rGeome.partName;\n\t\trGeome.vol = {\n\t\t\textrudes: [\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_side`,\n\t\t\t\t\tface: `${designName}_faceSide`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: param.L1,\n\t\t\t\t\trotate: [0, 0, 0],\n\t\t\t\t\ttranslate: [0, 0, -param.L1 / 2]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_face`,\n\t\t\t\t\tface: `${designName}_faceFace`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: param.L2,\n\t\t\t\t\trotate: [0, Math.PI / 2, 0],\n\t\t\t\t\ttranslate: [-param.L2 / 2, 0, 0]\n\t\t\t\t}\n\t\t\t],\n\t\t\tvolumes: [\n\t\t\t\t{\n\t\t\t\t\toutName: `pax_${designName}`,\n\t\t\t\t\tboolMethod: EBVolume.eUnion,\n\t\t\t\t\tinList: [`subpax_${designName}_side`, `subpax_${designName}_face`]\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t\t// sub-design\n\t\trGeome.sub = {};\n\t\t// finalize\n\t\trGeome.logstr += 'heliostat-swing draw successfully!\\n';\n\t\trGeome.calcErr = false;\n\t} catch (emsg) {\n\t\trGeome.logstr += emsg as string;\n\t\tconsole.log(emsg as string);\n\t}\n\treturn rGeome;\n}\n\nconst swingDef: tPageDef = {\n\tpTitle: 'Heliostat swing',\n\tpDescription: 'The swing for the heliostat inclination',\n\tpDef: pDef,\n\tpGeom: pGeom\n};\n\nexport { swingDef };\n","// heliostat_2.ts\n\nimport type {\n\t//tContour,\n\ttParamDef,\n\ttParamVal,\n\ttGeom,\n\ttPageDef,\n\ttSubInst\n\t//tSubDesign\n} from 'geometrix';\nimport {\n\tdesignParam,\n\tcheckGeom,\n\tprefixLog,\n\t//contour,\n\t//contourCircle,\n\tfigure,\n\tdegToRad,\n\tradToDeg,\n\tffix,\n\tpNumber,\n\t//pCheckbox,\n\t//pDropdown,\n\tinitGeom,\n\t//EExtrude,\n\tEBVolume\n\t//oneDesignParam\n} from 'geometrix';\n\n// design import\nimport { poleStaticDef } from './pole_static';\nimport { rakeStopperDef } from './rake_stopper';\nimport { swingDef } from './swing';\n\nconst pDef: tParamDef = {\n\tpartName: 'heliostat_2',\n\tparams: [\n\t\t//pNumber(name, unit, init, min, max, step)\n\t\tpNumber('H1', 'mm', 3000, 100, 40000, 10),\n\t\tpNumber('H2', 'mm', 2500, 100, 40000, 10),\n\t\tpNumber('H3', 'mm', 200, 10, 500, 10),\n\t\tpNumber('H4', 'mm', 800, 100, 4000, 10),\n\t\tpNumber('H5', 'mm', 3000, 100, 6000, 10),\n\t\tpNumber('H6', 'mm', 200, 100, 4000, 10),\n\t\tpNumber('H7', 'mm', 400, 100, 4000, 10),\n\t\tpNumber('H9', 'mm', 100, 10, 400, 10),\n\t\tpNumber('D1', 'mm', 1000, 100, 4000, 10),\n\t\tpNumber('D2', 'mm', 700, 100, 4000, 10),\n\t\tpNumber('D3', 'mm', 900, 100, 4000, 10),\n\t\tpNumber('D4', 'mm', 400, 100, 4000, 10),\n\t\tpNumber('D5', 'mm', 300, 100, 1000, 10),\n\t\tpNumber('D6', 'mm', 200, 100, 1000, 10),\n\t\tpNumber('D7', 'mm', 400, 100, 1000, 10),\n\t\tpNumber('D9', 'mm', 100, 10, 1000, 10),\n\t\tpNumber('E1', 'mm', 30, 1, 80, 1),\n\t\tpNumber('L1', 'mm', 12500, 1000, 40000, 10),\n\t\tpNumber('L2', 'mm', 6000, 1000, 40000, 10),\n\t\tpNumber('L3', 'mm', 100, 10, 500, 10),\n\t\tpNumber('L4', 'mm', 600, 100, 4000, 10),\n\t\tpNumber('L5', 'mm', 2000, 100, 6000, 10),\n\t\tpNumber('L6', 'mm', 2000, 100, 6000, 10),\n\t\tpNumber('L7', 'mm', 100, 10, 1000, 10),\n\t\tpNumber('L8', 'mm', 200, 10, 1000, 10),\n\t\tpNumber('al', 'degree', 80, 0, 95, 1),\n\t\tpNumber('S1', 'mm', 100, 10, 800, 1)\n\t],\n\tparamSvg: {\n\t\tH1: 'heliostat_overview.svg',\n\t\tH2: 'heliostat_side.svg',\n\t\tH3: 'heliostat2_side_sizing.svg',\n\t\tH4: 'heliostat2_side_sizing.svg',\n\t\tH5: 'heliostat2_side_sizing.svg',\n\t\tH6: 'heliostat2_side_sizing.svg',\n\t\tH7: 'heliostat2_side_sizing.svg',\n\t\tH9: 'heliostat2_side_sizing.svg',\n\t\tD1: 'heliostat2_side_sizing.svg',\n\t\tD2: 'heliostat2_side_sizing.svg',\n\t\tD3: 'heliostat2_side_sizing.svg',\n\t\tD4: 'heliostat2_side_sizing.svg',\n\t\tD5: 'heliostat2_side_sizing.svg',\n\t\tD6: 'heliostat2_side_sizing.svg',\n\t\tD7: 'heliostat2_side_sizing.svg',\n\t\tD9: 'heliostat2_face_sizing.svg',\n\t\tE1: 'heliostat2_side_sizing.svg',\n\t\tL1: 'heliostat2_face_sizing.svg',\n\t\tL2: 'heliostat2_side_sizing.svg',\n\t\tL3: 'heliostat2_face_sizing.svg',\n\t\tL4: 'heliostat2_face_sizing.svg',\n\t\tL5: 'heliostat2_face_sizing.svg',\n\t\tL6: 'heliostat2_face_sizing.svg',\n\t\tL7: 'heliostat2_face_sizing.svg',\n\t\tL8: 'heliostat2_face_sizing.svg',\n\t\tal: 'heliostat2_side_sizing.svg',\n\t\tS1: 'heliostat2_side_sizing.svg'\n\t},\n\tsim: {\n\t\ttMax: 180,\n\t\ttStep: 0.5,\n\t\ttUpdate: 500 // every 0.5 second\n\t}\n};\n\nfunction pGeom(t: number, param: tParamVal): tGeom {\n\tconst rGeome = initGeom(pDef.partName);\n\tconst figSide = figure();\n\tconst figFace = figure();\n\tconst figTop = figure();\n\trGeome.logstr += `${rGeome.partName} simTime: ${t}\\n`;\n\ttry {\n\t\tconst helioHeight =\n\t\t\tparam.H1 + param.H2 - param.H3 + param.H4 + param.H5 - param.H6 + param.H7;\n\t\trGeome.logstr += `heliostat-height: ${ffix(helioHeight)}, diameter ${ffix(param.D1)} m\\n`;\n\t\trGeome.logstr += `heliostat-swing-length: ${ffix(param.L1)}, width ${ffix(param.L2)} m\\n`;\n\t\tconst posAngleDegree = (param.al * t) / pDef.sim.tMax;\n\t\tconst posAngle = degToRad(posAngleDegree);\n\t\trGeome.logstr += `swing position angle: ${ffix(radToDeg(posAngle))} degree\\n`;\n\t\tconst rakePosY = param.H1 + param.H2 - param.H3;\n\t\tconst swingPosY = rakePosY + param.H4 + param.H5 - param.H6 + param.H7;\n\t\t// sub-designs\n\t\tconst poleStaticParam = designParam(poleStaticDef.pDef);\n\t\tconst rakeParam = designParam(rakeStopperDef.pDef);\n\t\tconst swingParam = designParam(swingDef.pDef);\n\t\tpoleStaticParam.setVal('H1', param.H1);\n\t\tpoleStaticParam.setVal('H2', param.H2);\n\t\tpoleStaticParam.setVal('D1', param.D1);\n\t\tpoleStaticParam.setVal('D2', param.D2);\n\t\tpoleStaticParam.setVal('E1', param.E1);\n\t\tpoleStaticParam.setVal('E2', param.E1);\n\t\trakeParam.setVal('H1', param.H4);\n\t\trakeParam.setVal('H2', param.H5);\n\t\trakeParam.setVal('D1', param.D3);\n\t\trakeParam.setVal('D2', param.D4);\n\t\trakeParam.setVal('L9', param.D3 / 2);\n\t\trakeParam.setVal('E1', param.E1);\n\t\trakeParam.setVal('E3', param.E1);\n\t\trakeParam.setVal('D3', param.D2 * 0.6);\n\t\tif (param.D2 > param.D3 - 2 * param.E1) {\n\t\t\tthrow `err153: D2 ${param.D2} too large compare to D3 ${param.D3} and E1 ${param.E1}`;\n\t\t}\n\t\trakeParam.setVal('H4', param.H6);\n\t\trakeParam.setVal('D4', param.D5);\n\t\trakeParam.setVal('L7', param.L7);\n\t\trakeParam.setVal('L8', param.L8);\n\t\trakeParam.setVal('D6', param.D9);\n\t\trakeParam.setVal('H5', param.H7);\n\t\trakeParam.setVal('D5', param.D6);\n\t\trakeParam.setVal('D8', param.D7);\n\t\tif (param.D6 >= param.D7) {\n\t\t\tthrow `err164: D6 ${param.D6} too large compare to D7 ${param.D7}`;\n\t\t}\n\t\tconst rakeL4 = param.L4 - 2 * param.L3;\n\t\trakeParam.setVal('L4', rakeL4);\n\t\tif (rakeL4 <= 0) {\n\t\t\tthrow `err169: L3 ${param.L3} too large compare to L4 ${param.L4}`;\n\t\t}\n\t\trakeParam.setVal('L5', param.L5 + 2 * param.L3);\n\t\trakeParam.setVal('L6', param.L6 + 2 * param.L3);\n\t\trakeParam.setVal('S1', param.S1);\n\t\trakeParam.setVal('S2', param.L2 / 2);\n\t\tswingParam.setVal('L2', param.L2);\n\t\tswingParam.setVal('D1', param.D6);\n\t\tswingParam.setVal('H4', param.H9);\n\t\tswingParam.setVal('L1', param.L1);\n\t\tif (param.L1 < 4 * param.L4 + 2 * param.L6 + param.L5 + 2 * param.L3) {\n\t\t\tthrow `err185: L1 ${param.L1} too small compare to L4 ${param.L4}, L5 ${param.L5}, L6 ${param.L6}`;\n\t\t}\n\t\tswingParam.setVal('H1', param.L3);\n\t\tswingParam.setVal('H2', param.L3);\n\t\tswingParam.setVal('L4', param.L4);\n\t\tswingParam.setVal('L5', param.L5);\n\t\tswingParam.setVal('L6', param.L6);\n\t\tswingParam.setVal('L3', param.D7);\n\t\tconst poleStaticGeom = poleStaticDef.pGeom(0, poleStaticParam.getParamVal());\n\t\tcheckGeom(poleStaticGeom);\n\t\trGeome.logstr += prefixLog(poleStaticGeom.logstr, poleStaticParam.partName);\n\t\tconst rakeGeom = rakeStopperDef.pGeom(0, rakeParam.getParamVal());\n\t\tcheckGeom(rakeGeom);\n\t\trGeome.logstr += prefixLog(rakeGeom.logstr, rakeParam.partName);\n\t\tconst swingGeom = swingDef.pGeom(0, swingParam.getParamVal());\n\t\tcheckGeom(swingGeom);\n\t\trGeome.logstr += prefixLog(swingGeom.logstr, swingParam.partName);\n\t\t// figSide\n\t\tfigSide.mergeFigure(poleStaticGeom.fig.poleCut);\n\t\tfigSide.mergeFigure(rakeGeom.fig.faceStopperSide.translate(0, rakePosY));\n\t\tfigSide.mergeFigure(\n\t\t\tswingGeom.fig.faceSide.translate(0, swingPosY).rotate(0, swingPosY, posAngle)\n\t\t);\n\t\t// figFace\n\t\tfigFace.mergeFigure(poleStaticGeom.fig.poleCut);\n\t\tfigFace.mergeFigure(rakeGeom.fig.faceStopperFaceT.translate(0, rakePosY));\n\t\tfigFace.mergeFigure(swingGeom.fig.faceFace.translate(0, swingPosY));\n\t\t// figTop\n\t\tfigTop.mergeFigure(poleStaticGeom.fig.poleBottom.translate(0, 0));\n\t\tfigTop.mergeFigure(rakeGeom.fig.faceStopperTop.translate(0, 0));\n\t\tfigTop.mergeFigure(swingGeom.fig.faceTop.rotate(0, 0, Math.PI / 2));\n\t\t// final figure list\n\t\trGeome.fig = {\n\t\t\tfaceSide: figSide,\n\t\t\tfaceFace: figFace,\n\t\t\tfaceTop: figTop\n\t\t};\n\t\tconst designName = rGeome.partName;\n\t\trGeome.vol = {\n\t\t\tinherits: [\n\t\t\t\t{\n\t\t\t\t\toutName: `inpax_${designName}_poleStatic`,\n\t\t\t\t\tsubdesign: 'pax_pole_static',\n\t\t\t\t\tsubgeom: poleStaticGeom,\n\t\t\t\t\trotate: [0, 0, 0],\n\t\t\t\t\ttranslate: [0, 0, 0]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `inpax_${designName}_rake`,\n\t\t\t\t\tsubdesign: 'pax_rake_stopper',\n\t\t\t\t\tsubgeom: rakeGeom,\n\t\t\t\t\trotate: [0, 0, 0],\n\t\t\t\t\ttranslate: [0, 0, rakePosY]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `inpax_${designName}_swing`,\n\t\t\t\t\tsubdesign: 'pax_swing',\n\t\t\t\t\tsubgeom: swingGeom,\n\t\t\t\t\trotate: [Math.PI / 2, 0, 0],\n\t\t\t\t\ttranslate: [0, 0, swingPosY]\n\t\t\t\t}\n\t\t\t],\n\t\t\textrudes: [],\n\t\t\tvolumes: [\n\t\t\t\t{\n\t\t\t\t\toutName: `pax_${designName}`,\n\t\t\t\t\tboolMethod: EBVolume.eUnion,\n\t\t\t\t\tinList: [\n\t\t\t\t\t\t`inpax_${designName}_poleStatic`,\n\t\t\t\t\t\t`inpax_${designName}_rake`,\n\t\t\t\t\t\t`inpax_${designName}_swing`\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t\t// sub-design\n\t\tconst poleDesignParamList = poleStaticParam.getDesignParamList();\n\t\t//poleDesignParamList.gaga = oneDesignParam(5, 6, true); // testing adding a wring param\n\t\tconst subPoleStatic: tSubInst = {\n\t\t\tpartName: poleStaticParam.getPartName(),\n\t\t\tdparam: poleDesignParamList,\n\t\t\torientation: [0, 0, 0],\n\t\t\tposition: [0, 0, 0]\n\t\t};\n\t\tconst subRake: tSubInst = {\n\t\t\tpartName: rakeParam.getPartName(),\n\t\t\tdparam: rakeParam.getDesignParamList(),\n\t\t\torientation: [0, 0, 0],\n\t\t\tposition: [0, 0, rakePosY]\n\t\t};\n\t\tconst subSwing: tSubInst = {\n\t\t\tpartName: swingParam.getPartName(),\n\t\t\tdparam: swingParam.getDesignParamList(),\n\t\t\torientation: [0, 0, 0],\n\t\t\tposition: [0, 0, swingPosY]\n\t\t};\n\t\trGeome.sub = {\n\t\t\tpole_static_1: subPoleStatic,\n\t\t\trake_1: subRake,\n\t\t\tswing_1: subSwing\n\t\t};\n\t\t// finalize\n\t\trGeome.logstr += 'heliostat-2-overview draw successfully!\\n';\n\t\trGeome.calcErr = false;\n\t} catch (emsg) {\n\t\trGeome.logstr += emsg as string;\n\t\tconsole.log(emsg as string);\n\t}\n\treturn rGeome;\n}\n\nconst heliostat_2Def: tPageDef = {\n\tpTitle: 'Heliostat-2 overview',\n\tpDescription: 'The heliostat-2 inclination mechanism',\n\tpDef: pDef,\n\tpGeom: pGeom\n};\n\nexport { heliostat_2Def };\n","// rake_stopper.ts\n\nimport type {\n\ttContour,\n\ttParamDef,\n\ttParamVal,\n\ttGeom,\n\t//tExtrude,\n\ttPageDef\n\t//tSubInst\n\t//tSubDesign\n} from 'geometrix';\nimport {\n\tdesignParam,\n\tcheckGeom,\n\tprefixLog,\n\tcontour,\n\tcontourCircle,\n\tfigure,\n\t//degToRad,\n\tradToDeg,\n\tffix,\n\tpNumber,\n\t//pCheckbox,\n\t//pDropdown,\n\tinitGeom,\n\tEExtrude,\n\tEBVolume\n} from 'geometrix';\n\n// design import\nimport { rakeDef } from './rake';\n\nconst pDef: tParamDef = {\n\tpartName: 'rake_stopper',\n\tparams: [\n\t\t//pNumber(name, unit, init, min, max, step)\n\t\tpNumber('D1', 'mm', 600, 100, 4000, 10),\n\t\tpNumber('D2', 'mm', 400, 100, 4000, 10),\n\t\tpNumber('D3', 'mm', 400, 100, 4000, 10),\n\t\tpNumber('H1', 'mm', 800, 100, 4000, 10),\n\t\tpNumber('H2', 'mm', 3000, 100, 6000, 10),\n\t\tpNumber('H3', 'mm', 400, 0, 4000, 10),\n\t\tpNumber('E1', 'mm', 20, 1, 80, 1),\n\t\tpNumber('E3', 'mm', 30, 1, 80, 1),\n\t\tpNumber('H4', 'mm', 200, 100, 1000, 10),\n\t\tpNumber('D4', 'mm', 300, 100, 1000, 10),\n\t\tpNumber('E4', 'mm', 20, 1, 80, 1),\n\t\tpNumber('H5', 'mm', 400, 100, 2000, 10),\n\t\tpNumber('D5', 'mm', 200, 10, 1000, 10),\n\t\tpNumber('L4', 'mm', 300, 10, 1000, 10),\n\t\tpNumber('L5', 'mm', 2000, 100, 4000, 10),\n\t\tpNumber('L6', 'mm', 2000, 100, 4000, 10),\n\t\tpNumber('D6', 'mm', 100, 10, 600, 10),\n\t\tpNumber('E6', 'mm', 10, 1, 80, 1),\n\t\tpNumber('L7', 'mm', 100, 10, 1000, 1),\n\t\tpNumber('L8', 'mm', 200, 10, 1000, 1),\n\t\tpNumber('N1', '', 24, 3, 100, 1),\n\t\tpNumber('D7', 'mm', 40, 1, 100, 1),\n\t\tpNumber('L1', 'mm', 30, 1, 300, 1),\n\t\tpNumber('D8', 'mm', 400, 100, 1000, 10),\n\t\tpNumber('H6', 'mm', 100, 50, 1000, 10),\n\t\tpNumber('H7', 'mm', 600, 100, 2000, 10),\n\t\tpNumber('L9', 'mm', 300, 100, 1000, 10),\n\t\tpNumber('R9', 'mm', 50, 0, 300, 1),\n\t\tpNumber('S1', 'mm', 100, 10, 300, 1),\n\t\tpNumber('S2', 'mm', 2000, 100, 8000, 10),\n\t\tpNumber('E7', 'mm', 5, 1, 80, 1)\n\t],\n\tparamSvg: {\n\t\tD1: 'rake_face.svg',\n\t\tD2: 'rake_face.svg',\n\t\tD3: 'rake_face.svg',\n\t\tH1: 'rake_face.svg',\n\t\tH2: 'rake_face.svg',\n\t\tH3: 'rake_face.svg',\n\t\tE1: 'rake_face.svg',\n\t\tE3: 'rake_face.svg',\n\t\tH4: 'rake_side.svg',\n\t\tD4: 'rake_side.svg',\n\t\tE4: 'rake_side.svg',\n\t\tH5: 'rake_side.svg',\n\t\tD5: 'rake_side.svg',\n\t\tL4: 'rake_face.svg',\n\t\tL5: 'rake_face.svg',\n\t\tL6: 'rake_face.svg',\n\t\tD6: 'rake_face.svg',\n\t\tE6: 'rake_face.svg',\n\t\tL7: 'rake_face.svg',\n\t\tL8: 'rake_face.svg',\n\t\tN1: 'rake_top.svg',\n\t\tD7: 'rake_top.svg',\n\t\tL1: 'rake_top.svg',\n\t\tD8: 'rake_side.svg',\n\t\tH6: 'rake_door.svg',\n\t\tH7: 'rake_door.svg',\n\t\tL9: 'rake_door.svg',\n\t\tR9: 'rake_door.svg',\n\t\tS1: 'rake_side_stopper.svg',\n\t\tS2: 'rake_top_stopper.svg',\n\t\tE7: 'rake_side_stopper.svg'\n\t},\n\tsim: {\n\t\ttMax: 180,\n\t\ttStep: 0.5,\n\t\ttUpdate: 500 // every 0.5 second\n\t}\n};\n\ntype tCtr2 = (width: number, height: number, xpos: number, ypos: number, angle: number) => tContour;\n\nfunction pGeom(t: number, param: tParamVal): tGeom {\n\tlet ctrRect: tCtr2;\n\tconst rGeome = initGeom(pDef.partName);\n\tconst figCone = figure();\n\tconst figBeam = figure();\n\tconst figBeamHollow = figure();\n\tconst figDisc = figure();\n\tconst figHand = figure();\n\tconst figWing = figure();\n\tconst figWingHollow = figure();\n\tconst figDoor = figure();\n\tconst figStopperTop = figure();\n\tconst figStopperSide = figure();\n\tconst figStopperSideH = figure();\n\tconst figStopperFaceT = figure();\n\tconst figStopperFaceTH = figure();\n\tconst figStopperFaceB = figure();\n\tconst figStopperFaceBH = figure();\n\trGeome.logstr += `${rGeome.partName} simTime: ${t}\\n`;\n\ttry {\n\t\tconst R1 = param.D1 / 2;\n\t\tconst H1H2 = param.H1 + param.H2;\n\t\tconst H1H5 = H1H2 - param.H4 + param.H5;\n\t\trGeome.logstr += `cone-height: ${ffix(H1H2)} mm\\n`;\n\t\trGeome.logstr += `cone-height total: ${ffix(H1H5)} mm\\n`;\n\t\tif (2 * param.E7 >= param.S1) {\n\t\t\tthrow `err135: E7 ${param.E7} too large compare to S1 ${param.S1}`;\n\t\t}\n\t\tif (param.L5 < param.D1 + 4 * param.S1) {\n\t\t\tthrow `err138: L5 ${param.L5} too small compare to D1 ${param.D1} and S1 ${param.S1}`;\n\t\t}\n\t\tconst stopper1H = H1H5 - param.S2;\n\t\tif (stopper1H < 0) {\n\t\t\tthrow `err143: S2 ${param.S2} too large compare to H1H5 ${ffix(H1H5)}`;\n\t\t}\n\t\tconst stopper2H = param.H1 + param.H2 - param.H4 + param.D4 / 2;\n\t\tconst stopper3H = param.H1 + param.L8 - param.S1;\n\t\tctrRect = function (\n\t\t\twidth: number,\n\t\t\theight: number,\n\t\t\txpos: number,\n\t\t\typos: number,\n\t\t\tangle: number\n\t\t): tContour {\n\t\t\tconst xWidth = width * Math.cos(angle);\n\t\t\tconst yWidth = width * Math.sin(angle);\n\t\t\tconst xHeight = -height * Math.sin(angle);\n\t\t\tconst yHeight = height * Math.cos(angle);\n\t\t\tconst rCtr = contour(xpos, ypos)\n\t\t\t\t.addSegStrokeA(xpos + xWidth, ypos + yWidth)\n\t\t\t\t.addSegStrokeA(xpos + xWidth + xHeight, ypos + yWidth + yHeight)\n\t\t\t\t.addSegStrokeA(xpos + xHeight, ypos + yHeight)\n\t\t\t\t.closeSegStroke();\n\t\t\treturn rCtr;\n\t\t};\n\t\t// sub-design rake\n\t\tconst rakeParam = designParam(rakeDef.pDef);\n\t\trakeParam.setVal('D1', param.D1);\n\t\trakeParam.setVal('D2', param.D2);\n\t\trakeParam.setVal('D3', param.D3);\n\t\trakeParam.setVal('H1', param.H1);\n\t\trakeParam.setVal('H2', param.H2);\n\t\trakeParam.setVal('H3', param.H3);\n\t\trakeParam.setVal('E1', param.E1);\n\t\trakeParam.setVal('E3', param.E3);\n\t\trakeParam.setVal('H4', param.H4);\n\t\trakeParam.setVal('D4', param.D4);\n\t\trakeParam.setVal('E4', param.E4);\n\t\trakeParam.setVal('H5', param.H5);\n\t\trakeParam.setVal('D5', param.D5);\n\t\trakeParam.setVal('L4', param.L4);\n\t\trakeParam.setVal('L5', param.L5);\n\t\trakeParam.setVal('L6', param.L6);\n\t\trakeParam.setVal('D6', param.D6);\n\t\trakeParam.setVal('E6', param.E6);\n\t\trakeParam.setVal('L7', param.L7);\n\t\trakeParam.setVal('L8', param.L8);\n\t\trakeParam.setVal('N1', param.N1);\n\t\trakeParam.setVal('D7', param.D7);\n\t\trakeParam.setVal('L1', param.L1);\n\t\trakeParam.setVal('D8', param.D8);\n\t\trakeParam.setVal('H6', param.H6);\n\t\trakeParam.setVal('H7', param.H7);\n\t\trakeParam.setVal('L9', param.L9);\n\t\trakeParam.setVal('R9', param.R9);\n\t\tconst rakeGeom = rakeDef.pGeom(0, rakeParam.getParamVal());\n\t\tcheckGeom(rakeGeom);\n\t\trGeome.logstr += prefixLog(rakeGeom.logstr, rakeParam.partName);\n\t\t// figures\n\t\tfigCone.mergeFigure(rakeGeom.fig.faceCone);\n\t\tfigBeam.mergeFigure(rakeGeom.fig.faceBeam);\n\t\tfigBeamHollow.mergeFigure(rakeGeom.fig.faceBeamHollow);\n\t\tfigDisc.mergeFigure(rakeGeom.fig.faceDisc);\n\t\tfigHand.mergeFigure(rakeGeom.fig.faceHand);\n\t\tfigWing.mergeFigure(rakeGeom.fig.faceWing);\n\t\tfigWingHollow.mergeFigure(rakeGeom.fig.faceWingHollow);\n\t\tfigDoor.mergeFigure(rakeGeom.fig.faceDoor);\n\t\t// figStopperTop\n\t\tfigStopperTop.mergeFigure(rakeGeom.fig.faceDisc, true);\n\t\tconst L5h = param.L5 / 2;\n\t\tconst S1r = param.S1 / 2;\n\t\tconst S1h = param.S1 - 2 * param.E7;\n\t\tconst S1hr = S1h / 2;\n\t\tfigStopperTop.addMain(ctrRect(param.S1, param.L5, -R1 - param.S1, -L5h, 0));\n\t\tfigStopperTop.addMain(ctrRect(S1h, param.L5, -R1 - param.E7 - S1h, -L5h, 0));\n\t\tfigStopperTop.addMain(ctrRect(param.S1, param.L5, param.S2 - param.S1, -L5h, 0));\n\t\tfigStopperTop.addMain(ctrRect(S1h, param.L5, param.S2 - param.E7 - S1h, -L5h, 0));\n\t\tconst S2s = param.S2 - param.S1 / 2;\n\t\tfigStopperTop.addMain(ctrRect(S2s, param.S1, 0, -L5h, 0));\n\t\tfigStopperTop.addMain(ctrRect(S2s, S1h, 0, -L5h + param.E7, 0));\n\t\tfigStopperTop.addMain(ctrRect(S2s, param.S1, 0, L5h - param.S1, 0));\n\t\tfigStopperTop.addMain(ctrRect(S2s, S1h, 0, L5h - param.S1 + param.E7, 0));\n\t\tfigStopperTop.addMain(ctrRect(S2s, param.S1, 0, -R1 - param.S1, 0));\n\t\tfigStopperTop.addMain(ctrRect(S2s, S1h, 0, -R1 - param.S1 + param.E7, 0));\n\t\tfigStopperTop.addMain(ctrRect(S2s, param.S1, 0, R1, 0));\n\t\tfigStopperTop.addMain(ctrRect(S2s, S1h, 0, R1 + param.E7, 0));\n\t\t// figStopperSide\n\t\tfigStopperSide.mergeFigure(rakeGeom.fig.faceBeam, true);\n\t\tfigStopperSide.addMain(contourCircle(-R1 - S1r, stopper1H + S1r, S1r));\n\t\tfigStopperSide.addMain(contourCircle(-R1 - S1r, stopper1H + S1r, S1hr));\n\t\tfigStopperSide.addMain(contourCircle(param.S2 - S1r, stopper2H + S1r, S1r));\n\t\tfigStopperSide.addMain(contourCircle(param.S2 - S1r, stopper2H + S1r, S1hr));\n\t\tfigStopperSide.addSecond(ctrRect(S2s, param.S1, 0, stopper2H, 0));\n\t\tfigStopperSide.addSecond(ctrRect(S2s, S1h, 0, stopper2H + param.E7, 0));\n\t\tconst stopper3Ly = stopper2H + param.S1 / 2 - stopper3H;\n\t\tconst stopper3L = Math.sqrt(S2s ** 2 + stopper3Ly ** 2);\n\t\tconst stopper3A = Math.atan2(stopper3Ly, S2s);\n\t\trGeome.logstr += `stopper-rod: L ${ffix(stopper3L)} mm, A ${ffix(\n\t\t\tradToDeg(stopper3A)\n\t\t)} degree\\n`;\n\t\tconst stp3posdX = S1r * Math.sin(stopper3A);\n\t\tconst stp3posdY = S1r * Math.cos(stopper3A);\n\t\tconst stp3posY = stopper3H - stp3posdY;\n\t\tfigStopperSide.addSecond(ctrRect(stopper3L, param.S1, stp3posdX, stp3posY, stopper3A));\n\t\tconst stp3posdX2 = S1hr * Math.sin(stopper3A);\n\t\tconst stp3posdY2 = S1hr * Math.cos(stopper3A);\n\t\tconst stp3posY2 = stopper3H - stp3posdY2;\n\t\tfigStopperSide.addSecond(ctrRect(stopper3L, S1h, stp3posdX2, stp3posY2, stopper3A));\n\t\t// figStopperSideH\n\t\tfigStopperSideH.mergeFigure(rakeGeom.fig.faceBeam, true);\n\t\tfigStopperSideH.addSecond(contourCircle(-R1 - S1r, stopper1H + S1r, S1r));\n\t\tfigStopperSideH.addMain(contourCircle(-R1 - S1r, stopper1H + S1r, S1hr));\n\t\tfigStopperSideH.addSecond(contourCircle(param.S2 - S1r, stopper2H + S1r, S1r));\n\t\tfigStopperSideH.addMain(contourCircle(param.S2 - S1r, stopper2H + S1r, S1hr));\n\t\t// figStopperFaceT\n\t\tfigStopperFaceT.mergeFigure(rakeGeom.fig.faceCone, true);\n\t\tfigStopperFaceT.addMain(contourCircle(-param.L5 / 2 + S1r, stopper2H + S1r, S1r));\n\t\tfigStopperFaceT.addMain(contourCircle(-param.L5 / 2 + S1r, stopper2H + S1r, S1hr));\n\t\tfigStopperFaceT.addMain(contourCircle(param.L5 / 2 - S1r, stopper2H + S1r, S1r));\n\t\tfigStopperFaceT.addMain(contourCircle(param.L5 / 2 - S1r, stopper2H + S1r, S1hr));\n\t\t// figStopperFaceTH\n\t\tfigStopperFaceTH.mergeFigure(rakeGeom.fig.faceCone, true);\n\t\tfigStopperFaceTH.addSecond(contourCircle(-param.L5 / 2 + S1r, stopper2H + S1r, S1r));\n\t\tfigStopperFaceTH.addMain(contourCircle(-param.L5 / 2 + S1r, stopper2H + S1r, S1hr));\n\t\tfigStopperFaceTH.addSecond(contourCircle(param.L5 / 2 - S1r, stopper2H + S1r, S1r));\n\t\tfigStopperFaceTH.addMain(contourCircle(param.L5 / 2 - S1r, stopper2H + S1r, S1hr));\n\t\t// figStopperFaceB\n\t\tfigStopperFaceB.mergeFigure(rakeGeom.fig.faceCone, true);\n\t\tfigStopperFaceB.addMain(contourCircle(-R1 - S1r, 0, S1r));\n\t\tfigStopperFaceB.addMain(contourCircle(-R1 - S1r, 0, S1hr));\n\t\tfigStopperFaceB.addMain(contourCircle(R1 + S1r, 0, S1r));\n\t\tfigStopperFaceB.addMain(contourCircle(R1 + S1r, 0, S1hr));\n\t\t// figStopperFaceBH\n\t\tfigStopperFaceBH.mergeFigure(rakeGeom.fig.faceCone, true);\n\t\tfigStopperFaceBH.addSecond(contourCircle(-R1 - S1r, 0, S1r));\n\t\tfigStopperFaceBH.addMain(contourCircle(-R1 - S1r, 0, S1hr));\n\t\tfigStopperFaceBH.addSecond(contourCircle(R1 + S1r, 0, S1r));\n\t\tfigStopperFaceBH.addMain(contourCircle(R1 + S1r, 0, S1hr));\n\t\t// final figure list\n\t\trGeome.fig = {\n\t\t\tfaceCone: figCone,\n\t\t\tfaceBeam: figBeam,\n\t\t\tfaceBeamHollow: figBeamHollow,\n\t\t\tfaceDisc: figDisc,\n\t\t\tfaceHand: figHand,\n\t\t\tfaceWing: figWing,\n\t\t\tfaceWingHollow: figWingHollow,\n\t\t\tfaceDoor: figDoor,\n\t\t\tfaceStopperTop: figStopperTop,\n\t\t\tfaceStopperSide: figStopperSide,\n\t\t\tfaceStopperSideH: figStopperSideH,\n\t\t\tfaceStopperFaceT: figStopperFaceT,\n\t\t\tfaceStopperFaceTH: figStopperFaceTH,\n\t\t\tfaceStopperFaceB: figStopperFaceB,\n\t\t\tfaceStopperFaceBH: figStopperFaceBH\n\t\t};\n\t\tconst designName = rGeome.partName;\n\t\trGeome.vol = {\n\t\t\tinherits: [\n\t\t\t\t{\n\t\t\t\t\toutName: `inpax_${designName}_rake`,\n\t\t\t\t\tsubdesign: 'pax_rake',\n\t\t\t\t\tsubgeom: rakeGeom,\n\t\t\t\t\trotate: [0, 0, 0],\n\t\t\t\t\ttranslate: [0, 0, 0]\n\t\t\t\t}\n\t\t\t],\n\t\t\textrudes: [\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_stpSide`,\n\t\t\t\t\tface: `${designName}_faceStopperSide`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: param.L5,\n\t\t\t\t\trotate: [Math.PI / 2, 0, 0],\n\t\t\t\t\ttranslate: [0, param.L5 / 2, 0]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_stpSideH`,\n\t\t\t\t\tface: `${designName}_faceStopperSideH`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: param.L5,\n\t\t\t\t\trotate: [Math.PI / 2, 0, 0],\n\t\t\t\t\ttranslate: [0, param.L5 / 2, 0]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_stpFaceT`,\n\t\t\t\t\tface: `${designName}_faceStopperFaceT`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: S2s,\n\t\t\t\t\trotate: [Math.PI / 2, 0, Math.PI / 2],\n\t\t\t\t\ttranslate: [0, 0, 0]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_stpFaceTH`,\n\t\t\t\t\tface: `${designName}_faceStopperFaceTH`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: S2s,\n\t\t\t\t\trotate: [Math.PI / 2, 0, Math.PI / 2],\n\t\t\t\t\ttranslate: [0, 0, 0]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_stpFaceB`,\n\t\t\t\t\tface: `${designName}_faceStopperFaceB`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: stopper3L,\n\t\t\t\t\trotate: [Math.PI / 2 - stopper3A, 0, Math.PI / 2],\n\t\t\t\t\ttranslate: [0, 0, stopper3H]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_stpFaceBH`,\n\t\t\t\t\tface: `${designName}_faceStopperFaceBH`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: stopper3L,\n\t\t\t\t\trotate: [Math.PI / 2 - stopper3A, 0, Math.PI / 2],\n\t\t\t\t\ttranslate: [0, 0, stopper3H]\n\t\t\t\t}\n\t\t\t],\n\t\t\tvolumes: [\n\t\t\t\t{\n\t\t\t\t\toutName: `ipax_${designName}_plus`,\n\t\t\t\t\tboolMethod: EBVolume.eUnion,\n\t\t\t\t\tinList: [\n\t\t\t\t\t\t`subpax_${designName}_stpSide`,\n\t\t\t\t\t\t`subpax_${designName}_stpFaceT`,\n\t\t\t\t\t\t`subpax_${designName}_stpFaceB`\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `ipax_${designName}_hollow`,\n\t\t\t\t\tboolMethod: EBVolume.eUnion,\n\t\t\t\t\tinList: [\n\t\t\t\t\t\t`subpax_${designName}_stpSideH`,\n\t\t\t\t\t\t`subpax_${designName}_stpFaceTH`,\n\t\t\t\t\t\t`subpax_${designName}_stpFaceBH`\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `ipax_${designName}_stopper`,\n\t\t\t\t\tboolMethod: EBVolume.eSubstraction,\n\t\t\t\t\tinList: [`ipax_${designName}_plus`, `ipax_${designName}_hollow`]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `pax_${designName}`,\n\t\t\t\t\tboolMethod: EBVolume.eUnion,\n\t\t\t\t\tinList: [`inpax_${designName}_rake`, `ipax_${designName}_stopper`]\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t\t// sub-design\n\t\trGeome.sub = {};\n\t\t// finalize\n\t\trGeome.logstr += 'heliostat-rake draw successfully!\\n';\n\t\trGeome.calcErr = false;\n\t} catch (emsg) {\n\t\trGeome.logstr += emsg as string;\n\t\tconsole.log(emsg as string);\n\t}\n\treturn rGeome;\n}\n\nconst rakeStopperDef: tPageDef = {\n\tpTitle: 'Heliostat rake with stopper',\n\tpDescription: 'The rake-stopper on top of the pole-rotor of the heliostat',\n\tpDef: pDef,\n\tpGeom: pGeom\n};\n\nexport { rakeStopperDef };\n","// base.ts\n\nimport type {\n\ttContour,\n\ttParamDef,\n\ttParamVal,\n\ttGeom,\n\ttExtrude,\n\ttPageDef\n\t//tSubInst\n\t//tSubDesign\n} from 'geometrix';\nimport {\n\tcontour,\n\tcontourCircle,\n\tfigure,\n\t//degToRad,\n\t//radToDeg,\n\tffix,\n\tpNumber,\n\t//pCheckbox,\n\t//pDropdown,\n\tinitGeom,\n\tEExtrude,\n\tEBVolume\n} from 'geometrix';\n\nconst pDef: tParamDef = {\n\tpartName: 'base',\n\tparams: [\n\t\t//pNumber(name, unit, init, min, max, step)\n\t\tpNumber('D1', 'mm', 600, 100, 4000, 10),\n\t\tpNumber('D2', 'mm', 700, 100, 4000, 10),\n\t\tpNumber('D3', 'mm', 400, 100, 4000, 10),\n\t\tpNumber('D4', 'mm', 500, 100, 4000, 10),\n\t\tpNumber('E1', 'mm', 30, 1, 80, 1),\n\t\tpNumber('E2', 'mm', 30, 1, 80, 1),\n\t\tpNumber('E3', 'mm', 30, 1, 80, 1),\n\t\tpNumber('H1', 'mm', 800, 10, 4000, 10),\n\t\tpNumber('H2', 'mm', 50, 10, 4000, 10),\n\t\tpNumber('H3', 'mm', 400, 10, 4000, 10),\n\t\tpNumber('N2', '', 12, 1, 100, 1),\n\t\tpNumber('L2', 'mm', 100, 1, 400, 1),\n\t\tpNumber('N1', '', 24, 3, 100, 1),\n\t\tpNumber('D5', 'mm', 40, 1, 100, 1),\n\t\tpNumber('L1', 'mm', 34, 1, 300, 1)\n\t],\n\tparamSvg: {\n\t\tD1: 'base_cut.svg',\n\t\tD2: 'base_cut.svg',\n\t\tD3: 'base_cut.svg',\n\t\tD4: 'base_cut.svg',\n\t\tE1: 'base_cut.svg',\n\t\tE2: 'base_cut.svg',\n\t\tE3: 'base_cut.svg',\n\t\tH1: 'base_cut.svg',\n\t\tH2: 'base_hollow.svg',\n\t\tH3: 'base_hollow.svg',\n\t\tN2: 'base_hollow.svg',\n\t\tL2: 'base_hollow.svg',\n\t\tN1: 'base_top.svg',\n\t\tD5: 'base_top.svg',\n\t\tL1: 'base_top.svg'\n\t},\n\tsim: {\n\t\ttMax: 180,\n\t\ttStep: 0.5,\n\t\ttUpdate: 500 // every 0.5 second\n\t}\n};\n\ntype tCtr1 = (orient: number) => tContour;\n\nfunction pGeom(t: number, param: tParamVal): tGeom {\n\tlet ctrBaseCut1: tCtr1;\n\tlet ctrBaseCut2: tCtr1;\n\tlet ctrHollow: tCtr1;\n\tconst rGeome = initGeom(pDef.partName);\n\tconst figCut = figure();\n\tconst figTop = figure();\n\tconst figHollow = figure();\n\trGeome.logstr += `${rGeome.partName} simTime: ${t}\\n`;\n\ttry {\n\t\tconst R1 = param.D1 / 2;\n\t\tconst R2 = param.D2 / 2;\n\t\tconst R3 = param.D3 / 2;\n\t\tconst R4 = param.D4 / 2;\n\t\tconst R5 = param.D5 / 2;\n\t\tconst RL2 = param.L2 / 2;\n\t\tif (R2 < R1) {\n\t\t\tthrow `err089: D2 ${param.D2} too small compare to D1 ${param.D1}`;\n\t\t}\n\t\tif (R4 > R1 - param.E2) {\n\t\t\tthrow `err189: D4 ${param.D4} too large compare to D1 ${param.D1} and E2 ${param.E2}`;\n\t\t}\n\t\trGeome.logstr += `base-height: ${ffix(param.H1)} mm\\n`;\n\t\trGeome.logstr += `base-external-diameter: ${ffix(param.D2)} mm\\n`;\n\t\t// figCut\n\t\tctrBaseCut1 = function (orient: number): tContour {\n\t\t\tconst rBaseCut1 = contour(orient * R2, 0)\n\t\t\t\t.addSegStrokeA(orient * R2, param.E3)\n\t\t\t\t.addSegStrokeA(orient * R1, param.E3)\n\t\t\t\t.addSegStrokeA(orient * R1, param.H1)\n\t\t\t\t.addSegStrokeA(orient * (R1 - param.E2), param.H1)\n\t\t\t\t.addSegStrokeA(orient * (R1 - param.E2), param.E3)\n\t\t\t\t.addSegStrokeA(orient * R4, param.E3)\n\t\t\t\t.addSegStrokeA(orient * R4, 0)\n\t\t\t\t.closeSegStroke();\n\t\t\treturn rBaseCut1;\n\t\t};\n\t\tctrBaseCut2 = function (orient: number): tContour {\n\t\t\tconst rBaseCut2 = contour(orient * R2, 0)\n\t\t\t\t.addSegStrokeA(orient * R2, param.E3)\n\t\t\t\t.addSegStrokeA(orient * R1, param.E3)\n\t\t\t\t.addSegStrokeA(orient * R1, param.H1)\n\t\t\t\t.addSegStrokeA(orient * R3, param.H1)\n\t\t\t\t.addSegStrokeA(orient * R3, param.H1 - param.E1)\n\t\t\t\t.addSegStrokeA(orient * (R1 - param.E2), param.H1 - param.E1)\n\t\t\t\t.addSegStrokeA(orient * (R1 - param.E2), param.E3)\n\t\t\t\t.addSegStrokeA(orient * R4, param.E3)\n\t\t\t\t.addSegStrokeA(orient * R4, 0)\n\t\t\t\t.closeSegStroke();\n\t\t\treturn rBaseCut2;\n\t\t};\n\t\tif (param.H1 < param.E3 + param.H2 + param.H3 + param.E1) {\n\t\t\tthrow `err125: H1 ${param.H1} too small compare to E3 ${param.H3}, H2 ${param.H2}, H3 ${param.H3}, E1 ${param.E1}`;\n\t\t}\n\t\tif (param.D5 > param.H3) {\n\t\t\tthrow `err128: D5 ${param.D5} too large compare to H3 ${param.H3}`;\n\t\t}\n\t\tconst hollowAngle = 2 * Math.asin(RL2 / (R1 - param.E2));\n\t\tif (param.N2 * hollowAngle > 2 * Math.PI) {\n\t\t\tthrow `err132: N2 ${param.N2} too large compare to L2 ${param.L2}, D1 ${param.D1}, E2 ${param.E2}`;\n\t\t}\n\t\tconst hollowH = param.E3 + param.H2 + RL2;\n\t\tctrHollow = function (orient: number): tContour {\n\t\t\tconst rHollow = contour(orient * RL2, hollowH)\n\t\t\t\t.addSegStrokeA(orient * RL2, hollowH + param.H3 - param.L2)\n\t\t\t\t.addPointA(-orient * RL2, hollowH + param.H3 - param.L2)\n\t\t\t\t.addSegArc(RL2, false, true)\n\t\t\t\t.addSegStrokeA(-orient * RL2, hollowH)\n\t\t\t\t//.addPointA(orient * RL2, hollowH)\n\t\t\t\t.closeSegArc(RL2, false, true);\n\t\t\treturn rHollow;\n\t\t};\n\t\tfigCut.addMain(ctrBaseCut1(1));\n\t\tfigCut.addSecond(ctrBaseCut2(1));\n\t\tfigCut.addSecond(ctrBaseCut2(-1));\n\t\tfigCut.addSecond(ctrHollow(1));\n\t\t// figTop\n\t\tif (R3 + param.L1 + R5 > R1 - param.E2) {\n\t\t\tthrow `err127: D3 ${param.D3} too large compare to D1 ${param.D1}, E2 ${param.E2}, L1 ${param.L1}, R5 ${param.D5}`;\n\t\t}\n\t\tif (R5 > param.L1) {\n\t\t\tthrow `err130: D5 ${param.D5} too large compare to L1 ${param.L1}`;\n\t\t}\n\t\tconst holeAngle = 2 * Math.asin(R5 / (R2 + param.L1));\n\t\tif (param.N1 * holeAngle > 2 * Math.PI) {\n\t\t\tthrow `err134: N1 ${param.N1} too large compare to D5 ${param.D5}, L1 ${param.L1}, D2 ${param.D2}`;\n\t\t}\n\t\tfigTop.addMain(contourCircle(0, 0, R1));\n\t\tfigTop.addMain(contourCircle(0, 0, R3));\n\t\tconst posR = R3 + param.L1;\n\t\tconst posA = (2 * Math.PI) / param.N1;\n\t\tfor (let i = 0; i < param.N1; i++) {\n\t\t\tconst posX = posR * Math.cos(i * posA);\n\t\t\tconst posY = posR * Math.sin(i * posA);\n\t\t\tfigTop.addMain(contourCircle(posX, posY, R5));\n\t\t}\n\t\tfigTop.addSecond(contourCircle(0, 0, R1 - param.E1));\n\t\tfigTop.addSecond(contourCircle(0, 0, R2));\n\t\tfigTop.addSecond(contourCircle(0, 0, R4));\n\t\t// figHollow\n\t\tfigHollow.addMain(ctrHollow(1));\n\t\tfigHollow.addSecond(ctrBaseCut2(1));\n\t\tfigHollow.addSecond(ctrBaseCut2(-1));\n\t\t// final figure list\n\t\trGeome.fig = {\n\t\t\tfaceCut: figCut,\n\t\t\tfaceTop: figTop,\n\t\t\tfaceHollow: figHollow\n\t\t};\n\t\tconst designName = rGeome.partName;\n\t\tconst hollowStep = (2 * Math.PI) / param.N2;\n\t\tconst lHollow = [...Array(param.N2).keys()];\n\t\tconst preExtrude = lHollow.map((idx) => {\n\t\t\tconst rHollow: tExtrude = {\n\t\t\t\toutName: `subpax_${designName}_hollow_${idx}`,\n\t\t\t\tface: `${designName}_faceHollow`,\n\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\tlength: R2 + param.E2,\n\t\t\t\trotate: [Math.PI / 2, 0, idx * hollowStep],\n\t\t\t\ttranslate: [0, 0, 0]\n\t\t\t};\n\t\t\treturn rHollow;\n\t\t});\n\t\tconst lVolHollow = lHollow.map((idx) => `subpax_${designName}_hollow_${idx}`);\n\t\trGeome.vol = {\n\t\t\textrudes: [\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_cut`,\n\t\t\t\t\tface: `${designName}_faceCut`,\n\t\t\t\t\textrudeMethod: EExtrude.eRotate,\n\t\t\t\t\trotate: [0, 0, 0],\n\t\t\t\t\ttranslate: [Math.PI / 2, 0, 0]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_top`,\n\t\t\t\t\tface: `${designName}_faceTop`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: param.E1,\n\t\t\t\t\trotate: [0, 0, 0],\n\t\t\t\t\ttranslate: [0, 0, param.H1 - param.E1]\n\t\t\t\t},\n\t\t\t\t...preExtrude\n\t\t\t],\n\t\t\tvolumes: [\n\t\t\t\t{\n\t\t\t\t\toutName: `ipax_${designName}_hollows`,\n\t\t\t\t\tboolMethod: EBVolume.eUnion,\n\t\t\t\t\tinList: [...lVolHollow]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `ipax_${designName}_cylinder`,\n\t\t\t\t\tboolMethod: EBVolume.eSubstraction,\n\t\t\t\t\tinList: [`subpax_${designName}_cut`, `ipax_${designName}_hollows`]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `pax_${designName}`,\n\t\t\t\t\tboolMethod: EBVolume.eUnion,\n\t\t\t\t\tinList: [`ipax_${designName}_cylinder`, `subpax_${designName}_top`]\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t\t// sub-design\n\t\trGeome.sub = {};\n\t\t// finalize\n\t\trGeome.logstr += 'heliostat-base draw successfully!\\n';\n\t\trGeome.calcErr = false;\n\t} catch (emsg) {\n\t\trGeome.logstr += emsg as string;\n\t\tconsole.log(emsg as string);\n\t}\n\treturn rGeome;\n}\n\nconst baseDef: tPageDef = {\n\tpTitle: 'Heliostat base',\n\tpDescription: 'The base for the static-pole of the heliostat',\n\tpDef: pDef,\n\tpGeom: pGeom\n};\n\nexport { baseDef };\n","// pole_rotor.ts\n\nimport type {\n\ttContour,\n\ttParamDef,\n\ttParamVal,\n\ttGeom,\n\ttPageDef\n\t//tSubInst\n\t//tSubDesign\n} from 'geometrix';\nimport {\n\tcontour,\n\tcontourCircle,\n\tfigure,\n\t//degToRad,\n\t//radToDeg,\n\tffix,\n\tpNumber,\n\t//pCheckbox,\n\t//pDropdown,\n\tinitGeom,\n\tEExtrude,\n\tEBVolume\n} from 'geometrix';\n\nconst pDef: tParamDef = {\n\tpartName: 'pole_rotor',\n\tparams: [\n\t\t//pNumber(name, unit, init, min, max, step)\n\t\tpNumber('D1', 'mm', 600, 100, 4000, 10),\n\t\tpNumber('D2', 'mm', 400, 100, 4000, 10),\n\t\tpNumber('H1', 'mm', 8000, 100, 40000, 10),\n\t\tpNumber('E1', 'mm', 5, 1, 80, 1),\n\t\tpNumber('E2', 'mm', 30, 1, 80, 1),\n\t\tpNumber('N1', '', 24, 3, 100, 1),\n\t\tpNumber('D3', 'mm', 40, 1, 100, 1),\n\t\tpNumber('L1', 'mm', 45, 1, 300, 1)\n\t],\n\tparamSvg: {\n\t\tD1: 'pole_rotor_cut.svg',\n\t\tD2: 'pole_rotor_cut.svg',\n\t\tH1: 'pole_rotor_cut.svg',\n\t\tE1: 'pole_rotor_cut.svg',\n\t\tE2: 'pole_rotor_cut.svg',\n\t\tN1: 'pole_rotor_ends.svg',\n\t\tD3: 'pole_rotor_ends.svg',\n\t\tL1: 'pole_rotor_ends.svg'\n\t},\n\tsim: {\n\t\ttMax: 180,\n\t\ttStep: 0.5,\n\t\ttUpdate: 500 // every 0.5 second\n\t}\n};\n\ntype tCtr1 = (orient: number) => tContour;\n\nfunction pGeom(t: number, param: tParamVal): tGeom {\n\tlet ctrPoleProfile: tCtr1;\n\tconst rGeome = initGeom(pDef.partName);\n\tconst figCut = figure();\n\tconst figBottom = figure();\n\trGeome.logstr += `${rGeome.partName} simTime: ${t}\\n`;\n\ttry {\n\t\tconst R1 = param.D1 / 2;\n\t\tconst R2 = param.D2 / 2;\n\t\tconst R3 = param.D3 / 2;\n\t\trGeome.logstr += `pole-height: ${ffix(param.H1)} mm\\n`;\n\t\t// figCut\n\t\tconst ctrCylinder = contour(R1, 0)\n\t\t\t.addSegStrokeA(R1, param.H1)\n\t\t\t.addSegStrokeA(R1 - param.E1, param.H1)\n\t\t\t.addSegStrokeA(R1 - param.E1, 0)\n\t\t\t.closeSegStroke();\n\t\tfigCut.addMain(ctrCylinder);\n\t\tctrPoleProfile = function (orient: number): tContour {\n\t\t\tconst rPoleProfile = contour(orient * R1, 0)\n\t\t\t\t.addSegStrokeA(orient * R1, param.H1)\n\t\t\t\t.addSegStrokeA(orient * R2, param.H1)\n\t\t\t\t.addSegStrokeA(orient * R2, param.H1 - param.E2)\n\t\t\t\t.addSegStrokeA(orient * (R1 - param.E1), param.H1 - param.E2)\n\t\t\t\t.addSegStrokeA(orient * (R1 - param.E1), param.E2)\n\t\t\t\t.addSegStrokeA(orient * R2, param.E2)\n\t\t\t\t.addSegStrokeA(orient * R2, 0)\n\t\t\t\t.closeSegStroke();\n\t\t\treturn rPoleProfile;\n\t\t};\n\t\tfigCut.addSecond(ctrPoleProfile(1));\n\t\tfigCut.addSecond(ctrPoleProfile(-1));\n\t\t// figBottom\n\t\tfigBottom.addMain(contourCircle(0, 0, R1));\n\t\tfigBottom.addMain(contourCircle(0, 0, R2));\n\t\tconst posR = R2 + param.L1;\n\t\tconst posA = (2 * Math.PI) / param.N1;\n\t\tfor (let i = 0; i < param.N1; i++) {\n\t\t\tconst posX = posR * Math.cos(i * posA);\n\t\t\tconst posY = posR * Math.sin(i * posA);\n\t\t\tfigBottom.addMain(contourCircle(posX, posY, R3));\n\t\t}\n\t\tfigBottom.addSecond(contourCircle(0, 0, R1 - param.E1));\n\t\t// final figure list\n\t\trGeome.fig = {\n\t\t\tfaceCut: figCut,\n\t\t\tfaceBottom: figBottom\n\t\t};\n\t\tconst designName = rGeome.partName;\n\t\trGeome.vol = {\n\t\t\textrudes: [\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_pole`,\n\t\t\t\t\tface: `${designName}_faceCut`,\n\t\t\t\t\textrudeMethod: EExtrude.eRotate,\n\t\t\t\t\trotate: [0, 0, 0],\n\t\t\t\t\ttranslate: [0, 0, 0]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_bottom`,\n\t\t\t\t\tface: `${designName}_faceBottom`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: param.E2,\n\t\t\t\t\trotate: [0, 0, 0],\n\t\t\t\t\ttranslate: [0, 0, 0]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_top`,\n\t\t\t\t\tface: `${designName}_faceBottom`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: param.E2,\n\t\t\t\t\trotate: [0, 0, 0],\n\t\t\t\t\ttranslate: [0, 0, param.H1 - param.E2]\n\t\t\t\t}\n\t\t\t],\n\t\t\tvolumes: [\n\t\t\t\t{\n\t\t\t\t\toutName: `pax_${designName}`,\n\t\t\t\t\tboolMethod: EBVolume.eUnion,\n\t\t\t\t\tinList: [\n\t\t\t\t\t\t`subpax_${designName}_pole`,\n\t\t\t\t\t\t`subpax_${designName}_bottom`,\n\t\t\t\t\t\t`subpax_${designName}_top`\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t\t// sub-design\n\t\trGeome.sub = {};\n\t\t// finalize\n\t\trGeome.logstr += 'pole_rotor draw successfully!\\n';\n\t\trGeome.calcErr = false;\n\t} catch (emsg) {\n\t\trGeome.logstr += emsg as string;\n\t\tconsole.log(emsg as string);\n\t}\n\treturn rGeome;\n}\n\nconst poleRotorDef: tPageDef = {\n\tpTitle: 'Heliostat pole rotor',\n\tpDescription: 'The vertical axis inside the pole of an heliostat',\n\tpDef: pDef,\n\tpGeom: pGeom\n};\n\nexport { poleRotorDef };\n","// rod.ts\n\nimport type {\n\ttContour,\n\ttParamDef,\n\ttParamVal,\n\ttGeom,\n\ttPageDef\n\t//tSubInst\n\t//tSubDesign\n} from 'geometrix';\nimport {\n\tcontour,\n\tcontourCircle,\n\tfigure,\n\t//degToRad,\n\t//radToDeg,\n\tffix,\n\tpNumber,\n\t//pCheckbox,\n\t//pDropdown,\n\tinitGeom,\n\tEExtrude,\n\tEBVolume\n} from 'geometrix';\n\nconst pDef: tParamDef = {\n\tpartName: 'rod',\n\tparams: [\n\t\t//pNumber(name, unit, init, min, max, step)\n\t\tpNumber('L1', 'mm', 10000, 1000, 40000, 10),\n\t\tpNumber('L2', 'mm', 100, 10, 400, 1),\n\t\tpNumber('L3', 'mm', 400, 100, 1000, 1),\n\t\tpNumber('L4', 'mm', 600, 100, 1000, 1),\n\t\tpNumber('H1', 'mm', 200, 10, 4000, 1),\n\t\tpNumber('E1', 'mm', 2, 1, 80, 1),\n\t\tpNumber('E2', 'mm', 10, 1, 80, 1),\n\t\tpNumber('N1', '', 10, 2, 50, 1),\n\t\tpNumber('N3', '', 2, 1, 20, 1),\n\t\tpNumber('N4', '', 4, 1, 20, 1),\n\t\tpNumber('R3', 'mm', 100, 1, 500, 1),\n\t\tpNumber('D2', 'mm', 10, 5, 100, 1),\n\t\tpNumber('L7', 'mm', 10, 1, 300, 1)\n\t],\n\tparamSvg: {\n\t\tL1: 'rod_top.svg',\n\t\tL2: 'rod_top.svg',\n\t\tL3: 'rod_top.svg',\n\t\tL4: 'rod_top.svg',\n\t\tH1: 'rod_cut.svg',\n\t\tE1: 'rod_cut.svg',\n\t\tE2: 'rod_cut.svg',\n\t\tN1: 'rod_top.svg',\n\t\tN3: 'rod_top.svg',\n\t\tN4: 'rod_top.svg',\n\t\tR3: 'rod_top.svg',\n\t\tD2: 'rod_plate.svg',\n\t\tL7: 'rod_plate.svg'\n\t},\n\tsim: {\n\t\ttMax: 180,\n\t\ttStep: 0.5,\n\t\ttUpdate: 500 // every 0.5 second\n\t}\n};\n\ntype tCtr1 = (py: number) => tContour[];\ntype tCtr2 = (py: number, ly: number) => tContour;\n\nfunction pGeom(t: number, param: tParamVal): tGeom {\n\tlet ctrPlate: tCtr1;\n\tlet ctrRod: tCtr2;\n\tconst rGeome = initGeom(pDef.partName);\n\tconst figCut = figure();\n\tconst figPlate = figure();\n\tconst figTop = figure();\n\trGeome.logstr += `${rGeome.partName} simTime: ${t}\\n`;\n\ttry {\n\t\tconst R2 = param.D2 / 2;\n\t\tconst n3step = param.L3 / (param.N3 + 1);\n\t\tconst n4step = param.L4 / (param.N4 + 1);\n\t\trGeome.logstr += `rod-length: ${ffix(param.L1)} mm\\n`;\n\t\tctrPlate = function (py: number): tContour[] {\n\t\t\tconst rPlate: tContour[] = [];\n\t\t\tconst plateExt = contour(param.L4 / 2, py)\n\t\t\t\t.addCornerRounded(param.R3)\n\t\t\t\t.addSegStrokeA(param.L4 / 2, py + param.L3)\n\t\t\t\t.addCornerRounded(param.R3)\n\t\t\t\t.addSegStrokeA(-param.L4 / 2, py + param.L3)\n\t\t\t\t.addCornerRounded(param.R3)\n\t\t\t\t.addSegStrokeA(-param.L4 / 2, py)\n\t\t\t\t.addCornerRounded(param.R3)\n\t\t\t\t.closeSegStroke();\n\t\t\trPlate.push(plateExt);\n\t\t\tfor (let i = 1; i < param.N3 + 1; i++) {\n\t\t\t\trPlate.push(contourCircle(param.L4 / 2 - param.L7, py + i * n3step, R2));\n\t\t\t\trPlate.push(contourCircle(-param.L4 / 2 + param.L7, py + i * n3step, R2));\n\t\t\t}\n\t\t\tfor (let i = 1; i < param.N4 + 1; i++) {\n\t\t\t\trPlate.push(contourCircle(-param.L4 / 2 + i * n4step, py + param.L7, R2));\n\t\t\t\trPlate.push(\n\t\t\t\t\tcontourCircle(-param.L4 / 2 + i * n4step, py + param.L3 - param.L7, R2)\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn rPlate;\n\t\t};\n\t\tctrRod = function (py: number, ly: number): tContour {\n\t\t\tconst rRod = contour(param.L2 / 2, py)\n\t\t\t\t.addSegStrokeA(param.L2 / 2, py + ly)\n\t\t\t\t.addSegStrokeA(-param.L2 / 2, py + ly)\n\t\t\t\t.addSegStrokeA(-param.L2 / 2, py)\n\t\t\t\t.closeSegStroke();\n\t\t\treturn rRod;\n\t\t};\n\t\t// figCut\n\t\tconst L2h = param.L2 / 2;\n\t\tconst L4h = param.L4 / 2;\n\t\tconst L2hi = (param.L2 - 2 * param.E1) / 2;\n\t\tconst H1i = param.H1 - param.E1;\n\t\tconst ctrRodExt = contour(L2h, 0)\n\t\t\t.addSegStrokeA(L2h, param.H1)\n\t\t\t.addSegStrokeA(-L2h, param.H1)\n\t\t\t.addSegStrokeA(-L2h, 0)\n\t\t\t.closeSegStroke();\n\t\tconst ctrRodInt = contour(L2hi, param.E1)\n\t\t\t.addSegStrokeA(L2hi, H1i)\n\t\t\t.addSegStrokeA(-L2hi, H1i)\n\t\t\t.addSegStrokeA(-L2h, param.E1)\n\t\t\t.closeSegStroke();\n\t\tconst ctrPlateSide = contour(L4h, param.H1)\n\t\t\t.addSegStrokeA(L4h, param.H1 + param.E2)\n\t\t\t.addSegStrokeA(-L4h, param.H1 + param.E2)\n\t\t\t.addSegStrokeA(-L4h, param.H1)\n\t\t\t.closeSegStroke();\n\t\tfigCut.addMain(ctrRodExt);\n\t\tfigCut.addMain(ctrRodInt);\n\t\tfigCut.addSecond(ctrPlateSide);\n\t\t// figPlate\n\t\tctrPlate(0).forEach((ctr) => figPlate.addMain(ctr));\n\t\tfigPlate.addSecond(ctrRod(-param.L3 / 2, 2 * param.L3));\n\t\t// figTop\n\t\tconst plateStep = (param.L1 - param.L3) / (param.N1 - 1);\n\t\tfor (let i = 0; i < param.N1; i++) {\n\t\t\tctrPlate(i * plateStep).forEach((ctr) => figTop.addMain(ctr));\n\t\t}\n\t\tfigTop.addSecond(ctrRod(0, param.L1));\n\t\t// final figure list\n\t\trGeome.fig = {\n\t\t\tfaceCut: figCut,\n\t\t\tfacePlate: figPlate,\n\t\t\tfaceTop: figTop\n\t\t};\n\t\tconst designName = rGeome.partName;\n\t\trGeome.vol = {\n\t\t\textrudes: [\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_rod`,\n\t\t\t\t\tface: `${designName}_faceCut`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: param.L1,\n\t\t\t\t\trotate: [0, 0, 0],\n\t\t\t\t\ttranslate: [0, 0, 0]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_plates`,\n\t\t\t\t\tface: `${designName}_faceTop`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: param.E2,\n\t\t\t\t\trotate: [Math.PI / 2, 0, 0],\n\t\t\t\t\ttranslate: [0, param.E2 + param.H1, 0]\n\t\t\t\t}\n\t\t\t],\n\t\t\tvolumes: [\n\t\t\t\t{\n\t\t\t\t\toutName: `pax_${designName}`,\n\t\t\t\t\tboolMethod: EBVolume.eUnion,\n\t\t\t\t\tinList: [`subpax_${designName}_rod`, `subpax_${designName}_plates`]\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t\t// sub-design\n\t\trGeome.sub = {};\n\t\t// finalize\n\t\trGeome.logstr += 'heliostat-rod draw successfully!\\n';\n\t\trGeome.calcErr = false;\n\t} catch (emsg) {\n\t\trGeome.logstr += emsg as string;\n\t\tconsole.log(emsg as string);\n\t}\n\treturn rGeome;\n}\n\nconst rodDef: tPageDef = {\n\tpTitle: 'Heliostat rod',\n\tpDescription: 'The rod of an heliostat-surface',\n\tpDef: pDef,\n\tpGeom: pGeom\n};\n\nexport { rodDef };\n","// trapeze.ts\n\nimport type {\n\ttContour,\n\ttParamDef,\n\ttParamVal,\n\ttGeom,\n\ttPageDef\n\t//tSubInst\n\t//tSubDesign\n} from 'geometrix';\nimport {\n\tcontour,\n\tcontourCircle,\n\tfigure,\n\t//degToRad,\n\tradToDeg,\n\tffix,\n\tpNumber,\n\t//pCheckbox,\n\t//pDropdown,\n\tinitGeom,\n\tEExtrude,\n\tEBVolume\n} from 'geometrix';\n\nconst pDef: tParamDef = {\n\tpartName: 'trapeze',\n\tparams: [\n\t\t//pNumber(name, unit, init, min, max, step)\n\t\tpNumber('L1', 'mm', 1600, 100, 4000, 10),\n\t\tpNumber('L2', 'mm', 1000, 100, 4000, 10),\n\t\tpNumber('L3', 'mm', 400, 100, 800, 10),\n\t\tpNumber('L4', 'mm', 300, 100, 800, 10),\n\t\tpNumber('N1', '', 7, 1, 20, 1),\n\t\tpNumber('N2', '', 4, 1, 20, 1),\n\t\tpNumber('N3', '', 2, 1, 20, 1),\n\t\tpNumber('N4', '', 2, 1, 20, 1),\n\t\tpNumber('L5', 'mm', 100, 1, 400, 1),\n\t\tpNumber('L6', 'mm', 20, 1, 400, 1),\n\t\tpNumber('L7', 'mm', 20, 1, 400, 1),\n\t\tpNumber('D1', 'mm', 10, 1, 40, 10),\n\t\tpNumber('D2', 'mm', 10, 1, 40, 10),\n\t\tpNumber('D3', 'mm', 30, 1, 100, 10),\n\t\tpNumber('D4', 'mm', 26, 1, 100, 10),\n\t\tpNumber('R1', 'mm', 60, 1, 400, 1),\n\t\tpNumber('R2', 'mm', 20, 1, 400, 1),\n\t\tpNumber('R3', 'mm', 20, 1, 400, 1),\n\t\tpNumber('H1', 'mm', 300, 0.5, 800, 0.5),\n\t\tpNumber('H2', 'mm', 2, 0.5, 800, 0.5),\n\t\tpNumber('H3', 'mm', 5, 0.5, 800, 0.5)\n\t],\n\tparamSvg: {\n\t\tL1: 'trapeze_top.svg',\n\t\tL2: 'trapeze_top.svg',\n\t\tL3: 'trapeze_top.svg',\n\t\tL4: 'trapeze_top.svg',\n\t\tN1: 'trapeze_top.svg',\n\t\tN2: 'trapeze_top.svg',\n\t\tN3: 'trapeze_top.svg',\n\t\tN4: 'trapeze_top.svg',\n\t\tL5: 'trapeze_top.svg',\n\t\tL6: 'trapeze_top.svg',\n\t\tL7: 'trapeze_top.svg',\n\t\tD1: 'trapeze_top.svg',\n\t\tD2: 'trapeze_top.svg',\n\t\tD3: 'trapeze_rod.svg',\n\t\tD4: 'trapeze_rod.svg',\n\t\tR1: 'trapeze_top.svg',\n\t\tR2: 'trapeze_top.svg',\n\t\tR3: 'trapeze_top.svg',\n\t\tH1: 'trapeze_side.svg',\n\t\tH2: 'trapeze_side.svg',\n\t\tH3: 'trapeze_side.svg'\n\t},\n\tsim: {\n\t\ttMax: 180,\n\t\ttStep: 0.5,\n\t\ttUpdate: 500 // every 0.5 second\n\t}\n};\n\ntype tCtr1 = (px: number, py: number, angle: number) => tContour;\n\nfunction pGeom(t: number, param: tParamVal): tGeom {\n\tlet ctrRodFootprint: tCtr1;\n\tlet ctrRod: tCtr1;\n\tconst rGeome = initGeom(pDef.partName);\n\tconst figFrame = figure();\n\tconst figPlate = figure();\n\tconst figRod = figure();\n\tconst figRodHollow = figure();\n\tconst figCutRod = figure();\n\trGeome.logstr += `${rGeome.partName} simTime: ${t}\\n`;\n\ttry {\n\t\tif (param.L3 > param.L1 - param.L5) {\n\t\t\tthrow `err595: L3 ${param.L3} too large compare to L1 ${param.L1} and L5 ${param.L5}`;\n\t\t}\n\t\tif (param.L4 > param.L2 - param.L5) {\n\t\t\tthrow `err596: L4 ${param.L4} too large compare to L2 ${param.L2} and L5 ${param.L5}`;\n\t\t}\n\t\tif (param.H1 - param.H2 - param.H3 < 4 * param.D3) {\n\t\t\tthrow `err597: H1 ${param.H1} too small compare to H2 ${param.H2}, H3 ${param.H3} and D3 ${param.D3}`;\n\t\t}\n\t\tconst pad1 = param.R1 * (1 - 1 / Math.sqrt(2));\n\t\tconst pad3 = param.R3 * (1 - 1 / Math.sqrt(2));\n\t\tconst rod_x = param.L2 / 2 - pad1 - (param.L4 / 2 - pad3);\n\t\tconst rod_y = param.L1 / 2 - pad1 - (param.L3 / 2 - pad3);\n\t\tconst rod_xy = Math.sqrt(rod_x ** 2 + rod_y ** 2);\n\t\tconst rod_z = param.H1 - param.H2 - param.H3;\n\t\tconst rod_slope_length = Math.sqrt(rod_xy ** 2 + rod_z ** 2);\n\t\tconst rod_slope_angle = Math.atan2(rod_z, rod_xy);\n\t\tconst rod_xy_angle = Math.atan2(rod_y, rod_x);\n\t\trGeome.logstr += `rod-slope: length: ${ffix(rod_slope_length)} mm, angle: ${ffix(\n\t\t\tradToDeg(rod_slope_angle)\n\t\t)} degree\\n`;\n\t\trGeome.logstr += `rod-xy-angle: ${ffix(radToDeg(rod_xy_angle))} degree\\n`;\n\t\tconst rodFootprintLength = param.D3 / Math.cos(Math.PI / 2 - rod_slope_angle);\n\t\trGeome.logstr += `rod-footprint-length: ${ffix(rodFootprintLength)} mm\\n`;\n\t\tconst rodFPl = Math.sqrt((rodFootprintLength / 2) ** 2 + (param.D3 / 2) ** 2);\n\t\tconst rodFPa = Math.atan2(param.D3, rodFootprintLength);\n\t\tctrRodFootprint = function (px: number, py: number, angle: number): tContour {\n\t\t\tconst rCtr = contour(px, py)\n\t\t\t\t.addPointRP(angle + Math.PI - rodFPa, rodFPl)\n\t\t\t\t.addSeg2Arcs(angle + Math.PI / 2, angle)\n\t\t\t\t.addPointRP(angle + Math.PI + rodFPa, rodFPl)\n\t\t\t\t.addSeg2Arcs(angle + Math.PI, angle + Math.PI / 2)\n\t\t\t\t.addPointRP(angle - rodFPa, rodFPl)\n\t\t\t\t.addSeg2Arcs(angle + (3 * Math.PI) / 2, angle + Math.PI)\n\t\t\t\t.addPointRP(angle + rodFPa, rodFPl)\n\t\t\t\t.addSeg2Arcs(angle, angle - Math.PI / 2);\n\t\t\treturn rCtr;\n\t\t};\n\t\tctrRod = function (px: number, py: number, angle: number): tContour {\n\t\t\tconst px0 = px + rodFPl * Math.cos(angle + Math.PI - rodFPa);\n\t\t\tconst py0 = py + rodFPl * Math.sin(angle + Math.PI - rodFPa);\n\t\t\tconst rCtr = contour(px0, py0)\n\t\t\t\t.addSegStrokeRP(angle + Math.PI, rod_xy)\n\t\t\t\t.addSegStrokeRP(angle - Math.PI / 2, param.D3)\n\t\t\t\t.addSegStrokeRP(angle, rod_xy)\n\t\t\t\t.closeSegStroke();\n\t\t\treturn rCtr;\n\t\t};\n\t\t// figFrame\n\t\tif (param.R1 > param.L1 / 4 || param.R1 > param.L2 / 4) {\n\t\t\tthrow `err614: R1 ${param.R1} too large compare to L1 ${param.L1} or L2 ${param.L2}`;\n\t\t}\n\t\tconst ctrFrameExt = contour(param.L2 / 2, param.L1 / 2)\n\t\t\t.addSegStrokeA(-param.L2 / 2, param.L1 / 2)\n\t\t\t.addCornerRounded(param.R1)\n\t\t\t.addSegStrokeA(-param.L2 / 2, -param.L1 / 2)\n\t\t\t.addCornerRounded(param.R1)\n\t\t\t.addSegStrokeA(param.L2 / 2, -param.L1 / 2)\n\t\t\t.addCornerRounded(param.R1)\n\t\t\t.closeSegStroke()\n\t\t\t.addCornerRounded(param.R1);\n\t\tif (param.R2 > (param.L1 - 2 * param.L5) / 4 || param.R2 > (param.L2 - 2 * param.L5) / 4) {\n\t\t\tthrow `err627: R2 ${param.R2} too large compare to L1 ${param.L1}, L2 ${param.L2} and L5 ${param.L5}`;\n\t\t}\n\t\tconst ctrFrameInt = contour(param.L2 / 2 - param.L5, param.L1 / 2 - param.L5)\n\t\t\t.addSegStrokeA(-param.L2 / 2 + param.L5, param.L1 / 2 - param.L5)\n\t\t\t.addCornerRounded(param.R2)\n\t\t\t.addSegStrokeA(-param.L2 / 2 + param.L5, -param.L1 / 2 + param.L5)\n\t\t\t.addCornerRounded(param.R2)\n\t\t\t.addSegStrokeA(param.L2 / 2 - param.L5, -param.L1 / 2 + param.L5)\n\t\t\t.addCornerRounded(param.R2)\n\t\t\t.closeSegStroke()\n\t\t\t.addCornerRounded(param.R2);\n\t\tif (param.R3 > param.L3 / 4 || param.R3 > param.L4 / 4) {\n\t\t\tthrow `err639: R3 ${param.R3} too large compare to L3 ${param.L3} or L4 ${param.L4}`;\n\t\t}\n\t\tconst ctrPlate = contour(param.L4 / 2, param.L3 / 2)\n\t\t\t.addSegStrokeA(-param.L4 / 2, param.L3 / 2)\n\t\t\t.addCornerRounded(param.R3)\n\t\t\t.addSegStrokeA(-param.L4 / 2, -param.L3 / 2)\n\t\t\t.addCornerRounded(param.R3)\n\t\t\t.addSegStrokeA(param.L4 / 2, -param.L3 / 2)\n\t\t\t.addCornerRounded(param.R3)\n\t\t\t.closeSegStroke()\n\t\t\t.addCornerRounded(param.R3);\n\t\tfigFrame.addMain(ctrFrameExt);\n\t\tfigFrame.addMain(ctrFrameInt);\n\t\tfigFrame.addSecond(ctrPlate);\n\t\tconst step1 = param.L1 / (param.N1 + 1);\n\t\tconst step2 = param.L2 / (param.N2 + 1);\n\t\tconst step3 = param.L3 / (param.N3 + 1);\n\t\tconst step4 = param.L4 / (param.N4 + 1);\n\t\tif (param.L5 < param.D1 + param.L6) {\n\t\t\tthrow `err658: L5 ${param.L5} too small compare to D1 ${param.D1} or L6 ${param.L6}`;\n\t\t}\n\t\tif (step3 < param.D2 + param.L7) {\n\t\t\tthrow `err661: D2 ${param.D2} or L7 ${param.L7} too large compare to L3 ${param.l3}`;\n\t\t}\n\t\tif (step4 < param.D2 + param.L7) {\n\t\t\tthrow `err664: D2 ${param.D2} or L7 ${param.L7} too large compare to L4 ${param.l4}`;\n\t\t}\n\t\tconst lFrameHole: tContour[] = [];\n\t\tfor (let i = 1; i < param.N1 + 1; i++) {\n\t\t\tlFrameHole.push(\n\t\t\t\tcontourCircle(param.L2 / 2 - param.L6, -param.L1 / 2 + i * step1, param.D1)\n\t\t\t);\n\t\t\tlFrameHole.push(\n\t\t\t\tcontourCircle(-param.L2 / 2 + param.L6, -param.L1 / 2 + i * step1, param.D1)\n\t\t\t);\n\t\t}\n\t\tfor (let i = 1; i < param.N2 + 1; i++) {\n\t\t\tlFrameHole.push(\n\t\t\t\tcontourCircle(-param.L2 / 2 + i * step2, param.L1 / 2 - param.L6, param.D1)\n\t\t\t);\n\t\t\tlFrameHole.push(\n\t\t\t\tcontourCircle(-param.L2 / 2 + i * step2, -param.L1 / 2 + param.L6, param.D1)\n\t\t\t);\n\t\t}\n\t\tconst lPlateHole: tContour[] = [];\n\t\tfor (let i = 1; i < param.N3 + 1; i++) {\n\t\t\tlPlateHole.push(\n\t\t\t\tcontourCircle(param.L4 / 2 - param.L7, -param.L3 / 2 + i * step3, param.D2)\n\t\t\t);\n\t\t\tlPlateHole.push(\n\t\t\t\tcontourCircle(-param.L4 / 2 + param.L7, -param.L3 / 2 + i * step3, param.D2)\n\t\t\t);\n\t\t}\n\t\tfor (let i = 1; i < param.N4 + 1; i++) {\n\t\t\tlPlateHole.push(\n\t\t\t\tcontourCircle(-param.L4 / 2 + i * step4, param.L3 / 2 - param.L7, param.D2)\n\t\t\t);\n\t\t\tlPlateHole.push(\n\t\t\t\tcontourCircle(-param.L4 / 2 + i * step4, -param.L3 / 2 + param.L7, param.D2)\n\t\t\t);\n\t\t}\n\t\tlFrameHole.forEach((ctr) => {\n\t\t\tfigFrame.addMain(ctr);\n\t\t});\n\t\tlPlateHole.forEach((ctr) => {\n\t\t\tfigFrame.addSecond(ctr);\n\t\t});\n\t\tconst lRodFP: tContour[] = [];\n\t\tlRodFP.push(ctrRodFootprint(param.L2 / 2 - pad1, param.L1 / 2 - pad1, rod_xy_angle));\n\t\tlRodFP.push(ctrRodFootprint(param.L4 / 2 - pad3, param.L3 / 2 - pad3, rod_xy_angle));\n\t\tlRodFP.push(\n\t\t\tctrRodFootprint(-param.L2 / 2 + pad1, param.L1 / 2 - pad1, Math.PI - rod_xy_angle)\n\t\t);\n\t\tlRodFP.push(\n\t\t\tctrRodFootprint(-param.L4 / 2 + pad3, param.L3 / 2 - pad3, Math.PI - rod_xy_angle)\n\t\t);\n\t\tlRodFP.push(\n\t\t\tctrRodFootprint(-param.L2 / 2 + pad1, -param.L1 / 2 + pad1, Math.PI + rod_xy_angle)\n\t\t);\n\t\tlRodFP.push(\n\t\t\tctrRodFootprint(-param.L4 / 2 + pad3, -param.L3 / 2 + pad3, Math.PI + rod_xy_angle)\n\t\t);\n\t\tlRodFP.push(ctrRodFootprint(param.L2 / 2 - pad1, -param.L1 / 2 + pad1, -rod_xy_angle));\n\t\tlRodFP.push(ctrRodFootprint(param.L4 / 2 - pad3, -param.L3 / 2 + pad3, -rod_xy_angle));\n\t\tconst lRod: tContour[] = [];\n\t\tlRod.push(ctrRod(param.L2 / 2 - pad1, param.L1 / 2 - pad1, rod_xy_angle));\n\t\tlRod.push(ctrRod(-param.L2 / 2 + pad1, param.L1 / 2 - pad1, Math.PI - rod_xy_angle));\n\t\tlRod.push(ctrRod(-param.L2 / 2 + pad1, -param.L1 / 2 + pad1, Math.PI + rod_xy_angle));\n\t\tlRod.push(ctrRod(param.L2 / 2 - pad1, -param.L1 / 2 + pad1, -rod_xy_angle));\n\t\tlRodFP.forEach((ctr) => {\n\t\t\tfigFrame.addSecond(ctr);\n\t\t});\n\t\tlRod.forEach((ctr) => {\n\t\t\tfigFrame.addSecond(ctr);\n\t\t});\n\t\t// figPlate\n\t\tfigPlate.addMain(ctrPlate);\n\t\tlPlateHole.forEach((ctr) => {\n\t\t\tfigPlate.addMain(ctr);\n\t\t});\n\t\tfigPlate.addSecond(ctrFrameExt);\n\t\tfigPlate.addSecond(ctrFrameInt);\n\t\tlFrameHole.forEach((ctr) => {\n\t\t\tfigPlate.addSecond(ctr);\n\t\t});\n\t\tlRodFP.forEach((ctr) => {\n\t\t\tfigPlate.addSecond(ctr);\n\t\t});\n\t\tlRod.forEach((ctr) => {\n\t\t\tfigPlate.addSecond(ctr);\n\t\t});\n\t\t// figRod\n\t\tif (param.D4 >= param.D3) {\n\t\t\tthrow `err218: D4 ${param.D4} larger than D3 ${param.D3}`;\n\t\t}\n\t\tfigRod.addMain(contourCircle(0, 0, param.D3 / 2));\n\t\tfigRod.addSecond(contourCircle(0, 0, param.D4 / 2));\n\t\t// figRodHollow\n\t\tfigRodHollow.addMain(contourCircle(0, 0, param.D4 / 2));\n\t\tfigRodHollow.addSecond(contourCircle(0, 0, param.D3 / 2));\n\t\t// figCutRod\n\t\tconst rodFootprintHeight = param.D3 * Math.cos(rod_slope_angle);\n\t\tconst rodFootprintBack = rodFootprintHeight / Math.tan(rod_slope_angle);\n\t\tconst pad3x = pad3 + (rodFootprintLength / 2 + rodFootprintBack) * Math.cos(rod_xy_angle);\n\t\tconst pad3y = pad3 + (rodFootprintLength / 2 + rodFootprintBack) * Math.sin(rod_xy_angle);\n\t\tconst rodExtrudeLength =\n\t\t\trod_slope_length + 2 * (rodFootprintLength + rodFootprintBack + rodFootprintHeight);\n\t\tconst cutL = rodExtrudeLength + param.L3 + param.L4 + rodFootprintHeight;\n\t\tconst ctrCutRod = contour(cutL, cutL)\n\t\t\t.addSegStrokeA(-cutL, cutL)\n\t\t\t.addSegStrokeA(-cutL, -cutL)\n\t\t\t.addSegStrokeA(cutL, -cutL)\n\t\t\t.closeSegStroke();\n\t\tfigCutRod.addMain(ctrCutRod);\n\t\t// final figure list\n\t\trGeome.fig = {\n\t\t\tfaceFrame: figFrame,\n\t\t\tfacePlate: figPlate,\n\t\t\tfaceRod: figRod,\n\t\t\tfaceRodHollow: figRodHollow,\n\t\t\tfaceCutRod: figCutRod\n\t\t};\n\t\tconst designName = rGeome.partName;\n\t\trGeome.vol = {\n\t\t\textrudes: [\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_frame`,\n\t\t\t\t\tface: `${designName}_faceFrame`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: param.H2,\n\t\t\t\t\trotate: [0, 0, 0],\n\t\t\t\t\ttranslate: [0, 0, param.H1 - param.H2]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_plate`,\n\t\t\t\t\tface: `${designName}_facePlate`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: param.H3,\n\t\t\t\t\trotate: [0, 0, 0],\n\t\t\t\t\ttranslate: [0, 0, 0]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_rod1`,\n\t\t\t\t\tface: `${designName}_faceRod`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: rodExtrudeLength,\n\t\t\t\t\trotate: [0, Math.PI / 2 - rod_slope_angle, rod_xy_angle],\n\t\t\t\t\ttranslate: [\n\t\t\t\t\t\tparam.L4 / 2 - pad3x,\n\t\t\t\t\t\tparam.L3 / 2 - pad3y,\n\t\t\t\t\t\tparam.H3 - rodFootprintHeight\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_rod2`,\n\t\t\t\t\tface: `${designName}_faceRod`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: rodExtrudeLength,\n\t\t\t\t\trotate: [0, Math.PI / 2 - rod_slope_angle, Math.PI - rod_xy_angle],\n\t\t\t\t\ttranslate: [\n\t\t\t\t\t\t-param.L4 / 2 + pad3x,\n\t\t\t\t\t\tparam.L3 / 2 - pad3y,\n\t\t\t\t\t\tparam.H3 - rodFootprintHeight\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_rod3`,\n\t\t\t\t\tface: `${designName}_faceRod`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: rodExtrudeLength,\n\t\t\t\t\trotate: [0, Math.PI / 2 - rod_slope_angle, Math.PI + rod_xy_angle],\n\t\t\t\t\ttranslate: [\n\t\t\t\t\t\t-param.L4 / 2 + pad3x,\n\t\t\t\t\t\t-param.L3 / 2 + pad3y,\n\t\t\t\t\t\tparam.H3 - rodFootprintHeight\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_rod4`,\n\t\t\t\t\tface: `${designName}_faceRod`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: rodExtrudeLength,\n\t\t\t\t\trotate: [0, Math.PI / 2 - rod_slope_angle, -rod_xy_angle],\n\t\t\t\t\ttranslate: [\n\t\t\t\t\t\tparam.L4 / 2 - pad3x,\n\t\t\t\t\t\t-param.L3 / 2 + pad3y,\n\t\t\t\t\t\tparam.H3 - rodFootprintHeight\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_rodH1`,\n\t\t\t\t\tface: `${designName}_faceRodHollow`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: rodExtrudeLength,\n\t\t\t\t\trotate: [0, Math.PI / 2 - rod_slope_angle, rod_xy_angle],\n\t\t\t\t\ttranslate: [\n\t\t\t\t\t\tparam.L4 / 2 - pad3x,\n\t\t\t\t\t\tparam.L3 / 2 - pad3y,\n\t\t\t\t\t\tparam.H3 - rodFootprintHeight\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_rodH2`,\n\t\t\t\t\tface: `${designName}_faceRodHollow`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: rodExtrudeLength,\n\t\t\t\t\trotate: [0, Math.PI / 2 - rod_slope_angle, Math.PI - rod_xy_angle],\n\t\t\t\t\ttranslate: [\n\t\t\t\t\t\t-param.L4 / 2 + pad3x,\n\t\t\t\t\t\tparam.L3 / 2 - pad3y,\n\t\t\t\t\t\tparam.H3 - rodFootprintHeight\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_rodH3`,\n\t\t\t\t\tface: `${designName}_faceRodHollow`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: rodExtrudeLength,\n\t\t\t\t\trotate: [0, Math.PI / 2 - rod_slope_angle, Math.PI + rod_xy_angle],\n\t\t\t\t\ttranslate: [\n\t\t\t\t\t\t-param.L4 / 2 + pad3x,\n\t\t\t\t\t\t-param.L3 / 2 + pad3y,\n\t\t\t\t\t\tparam.H3 - rodFootprintHeight\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_rodH4`,\n\t\t\t\t\tface: `${designName}_faceRodHollow`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: rodExtrudeLength,\n\t\t\t\t\trotate: [0, Math.PI / 2 - rod_slope_angle, -rod_xy_angle],\n\t\t\t\t\ttranslate: [\n\t\t\t\t\t\tparam.L4 / 2 - pad3x,\n\t\t\t\t\t\t-param.L3 / 2 + pad3y,\n\t\t\t\t\t\tparam.H3 - rodFootprintHeight\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_cut1`,\n\t\t\t\t\tface: `${designName}_faceCutRod`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: cutL,\n\t\t\t\t\trotate: [0, 0, 0],\n\t\t\t\t\ttranslate: [0, 0, -cutL]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_cut2`,\n\t\t\t\t\tface: `${designName}_faceCutRod`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: cutL,\n\t\t\t\t\trotate: [0, 0, 0],\n\t\t\t\t\ttranslate: [0, 0, param.H1]\n\t\t\t\t}\n\t\t\t],\n\t\t\tvolumes: [\n\t\t\t\t{\n\t\t\t\t\toutName: `ipax_${designName}_rawRod`,\n\t\t\t\t\tboolMethod: EBVolume.eUnion,\n\t\t\t\t\tinList: [\n\t\t\t\t\t\t`subpax_${designName}_rod1`,\n\t\t\t\t\t\t`subpax_${designName}_rod2`,\n\t\t\t\t\t\t`subpax_${designName}_rod3`,\n\t\t\t\t\t\t`subpax_${designName}_rod4`\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `ipax_${designName}_rodHollow`,\n\t\t\t\t\tboolMethod: EBVolume.eUnion,\n\t\t\t\t\tinList: [\n\t\t\t\t\t\t`subpax_${designName}_rodH1`,\n\t\t\t\t\t\t`subpax_${designName}_rodH2`,\n\t\t\t\t\t\t`subpax_${designName}_rodH3`,\n\t\t\t\t\t\t`subpax_${designName}_rodH4`\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `ipax_${designName}_halfRods`,\n\t\t\t\t\tboolMethod: EBVolume.eSubstraction,\n\t\t\t\t\tinList: [`ipax_${designName}_rawRod`, `subpax_${designName}_cut1`]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `ipax_${designName}_rods`,\n\t\t\t\t\tboolMethod: EBVolume.eSubstraction,\n\t\t\t\t\tinList: [`ipax_${designName}_halfRods`, `subpax_${designName}_cut2`]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `ipax_${designName}_plus`,\n\t\t\t\t\tboolMethod: EBVolume.eUnion,\n\t\t\t\t\tinList: [\n\t\t\t\t\t\t`subpax_${designName}_frame`,\n\t\t\t\t\t\t`subpax_${designName}_plate`,\n\t\t\t\t\t\t`ipax_${designName}_rods`\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toutName: `pax_${designName}`,\n\t\t\t\t\tboolMethod: EBVolume.eSubstraction,\n\t\t\t\t\tinList: [`ipax_${designName}_plus`, `ipax_${designName}_rodHollow`]\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t\t// sub-design\n\t\trGeome.sub = {};\n\t\t// finalize\n\t\trGeome.logstr += 'trapeze draw successfully!\\n';\n\t\trGeome.calcErr = false;\n\t} catch (emsg) {\n\t\trGeome.logstr += emsg as string;\n\t\tconsole.log(emsg as string);\n\t}\n\treturn rGeome;\n}\n\nconst trapezeDef: tPageDef = {\n\tpTitle: 'Heliostat trapeze',\n\tpDescription: 'The support of one solar panel. Made out of aluminium for lightness and cooling',\n\tpDef: pDef,\n\tpGeom: pGeom\n};\n\nexport { trapezeDef };\n","// surface.ts\n\nimport type {\n\ttContour,\n\ttParamDef,\n\ttParamVal,\n\ttGeom,\n\ttExtrude,\n\ttPageDef\n\t//tSubInst\n\t//tSubDesign\n} from 'geometrix';\nimport {\n\tcontour,\n\t//contourCircle,\n\tfigure,\n\t//degToRad,\n\t//radToDeg,\n\tffix,\n\tpNumber,\n\tpCheckbox,\n\tpDropdown,\n\tinitGeom,\n\tEExtrude,\n\tEBVolume\n} from 'geometrix';\n\nconst pDef: tParamDef = {\n\tpartName: 'surface',\n\tparams: [\n\t\t//pNumber(name, unit, init, min, max, step)\n\t\tpNumber('LH', 'mm', 1600, 100, 4000, 1),\n\t\tpNumber('LV', 'mm', 1000, 100, 4000, 1),\n\t\tpNumber('LZ', 'mm', 40, 0, 100, 1),\n\t\tpNumber('nx', '', 9, 1, 40, 1),\n\t\tpNumber('ny', '', 9, 1, 40, 1),\n\t\tpDropdown('main_direction', ['horizontal', 'vertical']),\n\t\tpCheckbox('crenel', false),\n\t\tpNumber('first_row', '', 9, 1, 40, 1),\n\t\tpNumber('second_row', '', 9, 1, 40, 1),\n\t\tpNumber('EH', 'mm', 10, 0, 1000, 1),\n\t\tpCheckbox('EH_gradient', false),\n\t\tpNumber('EH_sup', 'mm', 500, 0, 1000, 1),\n\t\tpNumber('EH_cycle', '', 1, 0, 3, 0.05),\n\t\tpNumber('EH_start', '', 0, 0, 1, 0.05),\n\t\tpDropdown('EH_shape', ['sinusoid', 'triangle', 'sawUp', 'sawDown']),\n\t\tpNumber('EV', 'mm', 10, 0, 1000, 1),\n\t\tpCheckbox('EV_gradient', false),\n\t\tpNumber('EV_sup', 'mm', 500, 0, 1000, 1),\n\t\tpNumber('EV_cycle', '', 1, 0, 3, 0.05),\n\t\tpNumber('EV_start', '', 0, 0, 1, 0.05),\n\t\tpDropdown('EV_shape', ['sinusoid', 'triangle', 'sawUp', 'sawDown']),\n\t\tpNumber('power_efficiency', '%', 16, 0, 100, 0.1),\n\t\tpNumber('solar_power', 'W/m2', 816, 100, 2000, 1) // 1361*0.6=816 W/m2\n\t],\n\tparamSvg: {\n\t\tLH: 'surface_main.svg',\n\t\tLV: 'surface_main.svg',\n\t\tLZ: 'surface_lz.svg',\n\t\tnx: 'surface_main.svg',\n\t\tny: 'surface_main.svg',\n\t\tmain_direction: 'surface_crenel.svg',\n\t\tcrenel: 'surface_crenel.svg',\n\t\tfirst_row: 'surface_extremities.svg',\n\t\tsecond_row: 'surface_extremities.svg',\n\t\tEH: 'surface_main.svg',\n\t\tEH_gradient: 'surface_space_evolution.svg',\n\t\tEH_sup: 'surface_space_evolution.svg',\n\t\tEH_cycle: 'surface_space_evolution.svg',\n\t\tEH_start: 'surface_space_evolution.svg',\n\t\tEH_shape: 'surface_space_shape.svg',\n\t\tEV: 'surface_main.svg',\n\t\tEV_gradient: 'surface_space_evolution.svg',\n\t\tEV_sup: 'surface_space_evolution.svg',\n\t\tEV_cycle: 'surface_space_evolution.svg',\n\t\tEV_start: 'surface_space_evolution.svg',\n\t\tEV_shape: 'surface_space_shape.svg',\n\t\tpower_efficiency: 'surface_power.svg',\n\t\tsolar_power: 'surface_power.svg'\n\t},\n\tsim: {\n\t\ttMax: 180,\n\t\ttStep: 0.5,\n\t\ttUpdate: 500 // every 0.5 second\n\t}\n};\n\n// (px, py) coordinates of bottom-left of the panel in mm\ntype tCtr1 = (px: number, py: number) => tContour;\ntype tPositions = [number, number][];\n\nfunction pGeom(t: number, param: tParamVal): tGeom {\n\tlet ctrPanelProfile: tCtr1;\n\tconst rGeome = initGeom(pDef.partName);\n\tconst figSurface = figure();\n\tconst figOnePanel = figure();\n\trGeome.logstr += `${rGeome.partName} simTime: ${t}\\n`;\n\ttry {\n\t\tconst panel_surface = (param.LH * param.LV) / 10 ** 6;\n\t\tconst panel_power = (param.solar_power * panel_surface * param.power_efficiency) / 100;\n\t\trGeome.logstr += `panel surface: ${ffix(panel_surface)} m2\\n`;\n\t\trGeome.logstr += `panel power: ${ffix(panel_power)} W\\n`;\n\t\tconst max_panel_nb = param.nx * param.ny;\n\t\trGeome.logstr += `max panel number: ${max_panel_nb}\\n`;\n\t\trGeome.logstr += `max panel surface: ${ffix(max_panel_nb * panel_surface)} m2\\n`;\n\t\trGeome.logstr += `max panel power: ${ffix(max_panel_nb * panel_power)} W\\n`;\n\t\tconst lenMain = param.main_direction === 1 ? param.ny : param.nx;\n\t\tconst lenLateral = param.main_direction === 1 ? param.nx : param.ny;\n\t\tconst EMain = param.main_direction === 1 ? param.EV : param.EH;\n\t\tconst EMainGradient = param.main_direction === 1 ? param.EV_gradient : param.EH_gradient;\n\t\tconst EMainSup = param.main_direction === 1 ? param.EV_sup : param.EH_sup;\n\t\tconst EMainCycle = param.main_direction === 1 ? param.EV_cycle : param.EH_cycle;\n\t\tconst EMainStart = param.main_direction === 1 ? param.EV_start : param.EH_start;\n\t\tconst EMainShape = param.main_direction === 1 ? param.EV_shape : param.EH_shape;\n\t\tconst ELateral = param.main_direction === 0 ? param.EV : param.EH;\n\t\tconst ELateralGradient = param.main_direction === 0 ? param.EV_gradient : param.EH_gradient;\n\t\tconst ELateralSup = param.main_direction === 0 ? param.EV_sup : param.EH_sup;\n\t\tconst ELateralCycle = param.main_direction === 0 ? param.EV_cycle : param.EH_cycle;\n\t\tconst ELateralStart = param.main_direction === 0 ? param.EV_start : param.EH_start;\n\t\tconst ELateralShape = param.main_direction === 0 ? param.EV_shape : param.EH_shape;\n\t\tconst lenRow: number[] = [];\n\t\tfor (let i = 0; i < lenMain; i++) {\n\t\t\tconst iEven = (i + 1) % 2; // 0 or 1\n\t\t\tconst elemNb = param.crenel ? lenLateral - iEven : lenLateral;\n\t\t\tlenRow.push(elemNb);\n\t\t}\n\t\tlenRow[0] = param.first_row;\n\t\tlenRow[lenRow.length - 1] = param.first_row;\n\t\tif (lenMain > 2) {\n\t\t\tlenRow[1] = param.second_row;\n\t\t\tlenRow[lenRow.length - 2] = param.second_row;\n\t\t}\n\t\tlet panelNb = 0;\n\t\tlenRow.forEach((oneRow) => {\n\t\t\tpanelNb += oneRow;\n\t\t});\n\t\trGeome.logstr += `actual panel number: ${panelNb} (${ffix(\n\t\t\t(100 * panelNb) / max_panel_nb\n\t\t)} %)\\n`;\n\t\trGeome.logstr += `actual panel surface: ${ffix(panelNb * panel_surface)} m2\\n`;\n\t\trGeome.logstr += `actual panel power: ${ffix(panelNb * panel_power)} W\\n`;\n\t\tconst eMain: number[] = [];\n\t\tfor (let i = 0; i < lenMain - 1; i++) {\n\t\t\tlet eSpace = EMain;\n\t\t\tif (EMainGradient === 1) {\n\t\t\t\tconst gapNb = lenMain > 2 ? lenMain - 2 : 1; // -2 to get a complete cycle\n\t\t\t\tconst phase = (EMainStart + (i * EMainCycle) / gapNb) % 1;\n\t\t\t\tswitch (EMainShape) {\n\t\t\t\t\tcase 0: // sinusoid\n\t\t\t\t\t\teSpace += (EMainSup * (1 - Math.cos(phase * 2 * Math.PI))) / 2;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 1: // triangle\n\t\t\t\t\t\teSpace += EMainSup * (1 - 2 * Math.abs(phase - 0.5));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2: // sawUp\n\t\t\t\t\t\teSpace += EMainSup * phase;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3: // sawDown\n\t\t\t\t\t\teSpace += EMainSup * (1 - phase);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\teSpace += EMainSup;\n\t\t\t\t}\n\t\t\t}\n\t\t\teMain.push(eSpace);\n\t\t}\n\t\tlet eMainTotal = 0;\n\t\tconst eMainCumul: number[] = [];\n\t\teMainCumul.push(0);\n\t\teMain.forEach((eSpace) => {\n\t\t\teMainTotal += eSpace;\n\t\t\teMainCumul.push(eMainTotal);\n\t\t});\n\t\tconst eLateral: number[] = [];\n\t\tfor (let i = 0; i < lenLateral - 1; i++) {\n\t\t\tlet eSpace = ELateral;\n\t\t\tif (ELateralGradient === 1) {\n\t\t\t\tconst gapNb = lenLateral > 2 ? lenLateral - 2 : 1; // -2 to get a complete cycle\n\t\t\t\tconst phase = (ELateralStart + (i * ELateralCycle) / gapNb) % 1;\n\t\t\t\tswitch (ELateralShape) {\n\t\t\t\t\tcase 0: // sinusoid\n\t\t\t\t\t\teSpace += (ELateralSup * (1 - Math.cos(phase * 2 * Math.PI))) / 2;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 1: // triangle\n\t\t\t\t\t\teSpace += ELateralSup * (1 - 2 * Math.abs(phase - 0.5));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2: // sawUp\n\t\t\t\t\t\teSpace += ELateralSup * phase;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3: // sawDown\n\t\t\t\t\t\teSpace += ELateralSup * (1 - phase);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\teSpace += ELateralSup;\n\t\t\t\t}\n\t\t\t}\n\t\t\teLateral.push(eSpace);\n\t\t}\n\t\tlet eLateralTotal = 0;\n\t\tconst eLateralCumul: number[] = [];\n\t\teLateralCumul.push(0);\n\t\teLateral.forEach((eSpace) => {\n\t\t\teLateralTotal += eSpace;\n\t\t\teLateralCumul.push(eLateralTotal);\n\t\t});\n\t\tlet gLenHorizontal = 0; // mm\n\t\tlet gLenVertical = 0; // mm\n\t\tif (param.main_direction === 0) {\n\t\t\t// horizontal\n\t\t\tgLenHorizontal = lenMain * param.LH + eMainTotal;\n\t\t\tgLenVertical = lenLateral * param.LV + eLateralTotal;\n\t\t} else {\n\t\t\t// vertical\n\t\t\tgLenHorizontal = lenLateral * param.LH + eLateralTotal;\n\t\t\tgLenVertical = lenMain * param.LV + eMainTotal;\n\t\t}\n\t\tconst gArea = (gLenHorizontal * gLenVertical) / 10 ** 6; // m2\n\t\trGeome.logstr += `global horizontal width: ${ffix(gLenHorizontal / 1000)} m\\n`;\n\t\trGeome.logstr += `global vertical height: ${ffix(gLenVertical / 1000)} m\\n`;\n\t\trGeome.logstr += `global area: ${ffix(gArea)} m2\\n`;\n\t\trGeome.logstr += `area efficiency: ${ffix((100 * panelNb * panel_surface) / gArea)} %\\n`;\n\t\tconst ox = -gLenHorizontal / 2;\n\t\tconst oy = -gLenVertical / 2;\n\t\tctrPanelProfile = function (px: number, py: number): tContour {\n\t\t\tconst rPanelProfile = contour(px, py)\n\t\t\t\t.addSegStrokeA(px + param.LH, py)\n\t\t\t\t.addSegStrokeA(px + param.LH, py + param.LV)\n\t\t\t\t.addSegStrokeA(px, py + param.LV)\n\t\t\t\t.closeSegStroke();\n\t\t\treturn rPanelProfile;\n\t\t};\n\t\t// figSurface\n\t\tconst panelPositions: tPositions = [];\n\t\tlenRow.forEach((oneRow, rowIdx) => {\n\t\t\tconst half = (lenLateral - oneRow) % 2;\n\t\t\tconst offset = Math.floor((lenLateral - oneRow) / 2);\n\t\t\tfor (let pIdx = 0; pIdx < oneRow; pIdx++) {\n\t\t\t\tlet dx = 0;\n\t\t\t\tlet dy = 0;\n\t\t\t\tif (param.main_direction === 0) {\n\t\t\t\t\t// horizontal\n\t\t\t\t\tdx = ox + rowIdx * param.LH + eMainCumul[rowIdx];\n\t\t\t\t\tdy = oy + (offset + pIdx) * param.LV + eLateralCumul[offset + pIdx];\n\t\t\t\t\tif (half === 1) {\n\t\t\t\t\t\tdy +=\n\t\t\t\t\t\t\t(param.LV +\n\t\t\t\t\t\t\t\teLateralCumul[offset + pIdx + 1] -\n\t\t\t\t\t\t\t\teLateralCumul[offset + pIdx]) /\n\t\t\t\t\t\t\t2;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// vertical\n\t\t\t\t\tdy = oy + rowIdx * param.LV + eMainCumul[rowIdx];\n\t\t\t\t\tdx = ox + (offset + pIdx) * param.LH + eLateralCumul[offset + pIdx];\n\t\t\t\t\tif (half === 1) {\n\t\t\t\t\t\tdx +=\n\t\t\t\t\t\t\t(param.LH +\n\t\t\t\t\t\t\t\teLateralCumul[offset + pIdx + 1] -\n\t\t\t\t\t\t\t\teLateralCumul[offset + pIdx]) /\n\t\t\t\t\t\t\t2;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpanelPositions.push([dx, dy]);\n\t\t\t}\n\t\t});\n\t\tfor (const pos of panelPositions) {\n\t\t\tfigSurface.addMain(ctrPanelProfile(pos[0], pos[1]));\n\t\t}\n\t\t// figOnePanel\n\t\tfigOnePanel.addMain(ctrPanelProfile(0, 0));\n\t\t// final figure list\n\t\trGeome.fig = {\n\t\t\tfaceSurface: figSurface,\n\t\t\tfaceOnePanel: figOnePanel\n\t\t};\n\t\tconst designName = rGeome.partName;\n\t\trGeome.vol = {\n\t\t\textrudes: panelPositions.map((elem, idx) => {\n\t\t\t\tconst rElem: tExtrude = {\n\t\t\t\t\toutName: `subpax_${designName}_panel_${idx}`,\n\t\t\t\t\tface: `${designName}_faceOnePanel`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: param.LZ,\n\t\t\t\t\trotate: [0, 0, 0],\n\t\t\t\t\ttranslate: [elem[0], elem[1], 0]\n\t\t\t\t};\n\t\t\t\treturn rElem;\n\t\t\t}),\n\t\t\tvolumes: [\n\t\t\t\t{\n\t\t\t\t\toutName: `pax_${designName}`,\n\t\t\t\t\t//boolMethod: EBVolume.eIdentity,\n\t\t\t\t\tboolMethod: EBVolume.eUnion,\n\t\t\t\t\tinList: panelPositions.map((elem, idx) => {\n\t\t\t\t\t\tconst subElem = `subpax_${designName}_panel_${idx}`;\n\t\t\t\t\t\treturn subElem;\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t\t// sub-design\n\t\trGeome.sub = {};\n\t\t// finalize\n\t\trGeome.logstr += 'panel-surface draw successfully!\\n';\n\t\trGeome.calcErr = false;\n\t} catch (emsg) {\n\t\trGeome.logstr += emsg as string;\n\t\tconsole.log(emsg as string);\n\t}\n\treturn rGeome;\n}\n\nconst surfaceDef: tPageDef = {\n\tpTitle: 'Heliostat panel-surface',\n\tpDescription: 'The surface collecting the solar power',\n\tpDef: pDef,\n\tpGeom: pGeom\n};\n\nexport { surfaceDef };\n","// circles.ts\n\nimport type { tParamDef, tParamVal, tGeom, tPageDef } from 'geometrix';\nimport { degToRad, point, figure, pNumber, initGeom } from 'geometrix';\n\n//const pi12 = fround(Math.PI / 12);\n//const pi24 = fround(Math.PI / 24); // input-number min and step must be rounded to avoid UI issue\n//const pi4 = fround(Math.PI / 4);\n//const pi120 = fround(Math.PI / 120); // rounded to avoid UI issue\n\nconst pDef: tParamDef = {\n\tpartName: 'circles',\n\tparams: [\n\t\t//pNumber(name, unit, init, min, max, step)\n\t\tpNumber('angle', 'degree', 15, 5, 45, 1),\n\t\tpNumber('amplitude-offset', 'mm', 1, 0.5, 4, 0.1),\n\t\tpNumber('amplitude-scale', 'scalar', 0.2, 0.1, 0.5, 0.01)\n\t],\n\tparamSvg: {\n\t\tangle: 'circles_angle.svg',\n\t\t'amplitude-offset': 'circles_amplitude-offset.svg',\n\t\t'amplitude-scale': 'circles_amplitude-scale.svg'\n\t},\n\tsim: {\n\t\ttMax: 10,\n\t\ttStep: 0.1,\n\t\ttUpdate: 500\n\t}\n};\n\nfunction pGeom(t: number, param: tParamVal): tGeom {\n\tconst rGeome = initGeom(pDef.partName);\n\trGeome.logstr += `${rGeome.partName} simTime: ${t}\\n`;\n\ttry {\n\t\tconst figOne = figure();\n\t\t//figOne.addPoint(point(0, 0));\n\t\tconst p1 = point(10, 10);\n\t\tconst p2 = point(10, 30);\n\t\t//figOne.addPoint(p1);\n\t\tfigOne.addPoint(p2);\n\t\tfor (let i = 0; i < 20; i++) {\n\t\t\tfigOne.addPoint(\n\t\t\t\tp1\n\t\t\t\t\t.scale(p2, param['amplitude-offset'] + param['amplitude-scale'] * i)\n\t\t\t\t\t.rotate(p2, i * degToRad(param.angle) + (t * Math.PI) / 2 / pDef.sim.tMax)\n\t\t\t);\n\t\t}\n\t\trGeome.fig = { one: figOne };\n\t\trGeome.logstr += 'Circles draw successfully!\\n';\n\t\trGeome.calcErr = false;\n\t} catch (emsg) {\n\t\trGeome.logstr += emsg as string;\n\t\tconsole.log(emsg as string);\n\t}\n\treturn rGeome;\n}\n\nconst circlesDef: tPageDef = {\n\tpTitle: 'Circles',\n\tpDescription: 'A spiral made by points.',\n\tpDef: pDef,\n\tpGeom: pGeom\n};\n\nexport { circlesDef };\n","// rectangle.ts\n\nimport type { tParamDef, tParamVal, tGeom, tPageDef } from 'geometrix';\nimport { point, figure, pNumber, initGeom } from 'geometrix';\n\nconst pDef: tParamDef = {\n\tpartName: 'rectangle',\n\tparams: [\n\t\t//pNumber(name, unit, init, min, max, step)\n\t\tpNumber('width', 'mm', 15, 3, 40, 0.5),\n\t\tpNumber('height', 'mm', 10, 3, 40, 0.5)\n\t],\n\tparamSvg: {\n\t\twidth: 'rectangle_width.svg',\n\t\theight: 'rectangle_height.svg'\n\t},\n\tsim: {\n\t\ttMax: 120,\n\t\ttStep: 1,\n\t\ttUpdate: 500\n\t}\n};\n\nfunction pGeom(t: number, param: tParamVal): tGeom {\n\tconst rGeome = initGeom(pDef.partName);\n\trGeome.logstr += `${rGeome.partName} simTime: ${t}\\n`;\n\ttry {\n\t\tconst figOne = figure();\n\t\tconst p1 = point(10, 10);\n\t\tconst p2 = point(10 + param.width, 10);\n\t\tconst p3 = point(10 + param.width, 10 + param.height);\n\t\tconst p4 = point(10, 10 + param.height);\n\t\tconst angle = (t * Math.PI) / 180;\n\t\tfigOne.addPoint(p1);\n\t\tfigOne.addPoint(p2.rotate(p1, angle));\n\t\tfigOne.addPoint(p3.rotate(p1, angle));\n\t\tfigOne.addPoint(p4.rotate(p1, angle));\n\t\trGeome.fig = { one: figOne };\n\t\trGeome.logstr += 'Rectangle draw successfully!\\n';\n\t\trGeome.calcErr = false;\n\t} catch (emsg) {\n\t\trGeome.logstr += emsg as string;\n\t\tconsole.log(emsg as string);\n\t}\n\treturn rGeome;\n}\n\nconst rectangleDef: tPageDef = {\n\tpTitle: 'Rectangle',\n\tpDescription: 'Just a rectangle.',\n\tpDef: pDef,\n\tpGeom: pGeom\n};\n\nexport { rectangleDef };\n","// pole_static.ts\n\nimport type {\n\t//tContour,\n\ttParamDef,\n\ttParamVal,\n\ttGeom,\n\ttPageDef\n\t//tSubInst\n\t//tSubDesign\n} from 'geometrix';\nimport {\n\tcontour,\n\tcontourCircle,\n\tfigure,\n\t//degToRad,\n\t//radToDeg,\n\t//ffix,\n\tpNumber,\n\t//pCheckbox,\n\t//pDropdown,\n\tinitGeom\n\t//EExtrude,\n\t//EBVolume\n} from 'geometrix';\n\nconst pDef: tParamDef = {\n\tpartName: 'pole_static',\n\tparams: [\n\t\t//pNumber(name, unit, init, min, max, step)\n\t\tpNumber('H1', 'mm', 4000, 100, 40000, 10),\n\t\tpNumber('H2', 'mm', 5000, 100, 40000, 10),\n\t\tpNumber('radius', 'mm', 1000, 100, 40000, 10)\n\t],\n\tparamSvg: {\n\t\tH1: 'dummy_pole_static_face.svg',\n\t\tH2: 'dummy_pole_static_face.svg',\n\t\tradius: 'dummy_pole_static_face.svg'\n\t},\n\tsim: {\n\t\ttMax: 180,\n\t\ttStep: 0.5,\n\t\ttUpdate: 500 // every 0.5 second\n\t}\n};\n\nfunction pGeom(t: number, param: tParamVal): tGeom {\n\tconst rGeome = initGeom(pDef.partName);\n\tconst figFace = figure();\n\trGeome.logstr += `${rGeome.partName} simTime: ${t}\\n`;\n\ttry {\n\t\t// figFace\n\t\tconst ctrPoleFace = contour(-param.H1 / 2, -param.H2 / 2)\n\t\t\t.addSegStrokeA(param.H1 / 2, -param.H2 / 2)\n\t\t\t.addSegStrokeA(param.H1 / 2, param.H2 / 2)\n\t\t\t.addSegStrokeA(-param.H1 / 2, param.H2 / 2)\n\t\t\t.closeSegStroke();\n\t\tfigFace.addMain(ctrPoleFace);\n\t\tfigFace.addMain(contourCircle(0, 0, param.radius));\n\t\t// final figure list\n\t\trGeome.fig = {\n\t\t\tpoleFace: figFace\n\t\t};\n\t\t// volume\n\t\t//const designName = rGeome.partName;\n\t\t//rGeome.vol = {};\n\t\t// sub-design\n\t\trGeome.sub = {};\n\t\t// finalize\n\t\trGeome.logstr += 'dummy_pole_static draw successfully!\\n';\n\t\trGeome.calcErr = false;\n\t} catch (emsg) {\n\t\trGeome.logstr += emsg as string;\n\t\tconsole.log(emsg as string);\n\t}\n\treturn rGeome;\n}\n\nconst dummyPoleStaticDef: tPageDef = {\n\tpTitle: 'Dummy pole static',\n\tpDescription: 'Testing two design with identical name',\n\tpDef: pDef,\n\tpGeom: pGeom\n};\n\nexport { dummyPoleStaticDef };\n","// verify_point.ts\n\nimport type { tParamDef, tParamVal, tGeom, tPageDef } from 'geometrix';\nimport { degToRad, point, figure, pNumber, initGeom } from 'geometrix';\n\nconst pDef: tParamDef = {\n\tpartName: 'verify_point',\n\tparams: [\n\t\t//pNumber(name, unit, init, min, max, step)\n\t\tpNumber('p1x', 'mm', 30, -200, 200, 1),\n\t\tpNumber('p1y', 'mm', 50, -200, 200, 1),\n\t\tpNumber('p2a', 'degree', 30, -200, 200, 1),\n\t\tpNumber('p2l', 'mm', 60, 0, 200, 1),\n\t\tpNumber('rotateOrig', 'degree', 45, -200, 200, 1),\n\t\tpNumber('scaleOrig', 'scalar', 1.5, 0.1, 2, 0.1)\n\t],\n\tparamSvg: {\n\t\tp1x: 'verify_point_p1x.svg',\n\t\tp1y: 'verify_point_p1x.svg',\n\t\tp2a: 'verify_point_p1x.svg',\n\t\tp2l: 'verify_point_p1x.svg',\n\t\trotateOrig: 'verify_point_p1x.svg',\n\t\tscaleOrig: 'verify_point_p1x.svg'\n\t},\n\tsim: {\n\t\ttMax: 10,\n\t\ttStep: 0.1,\n\t\ttUpdate: 500 // every 0.5 second\n\t}\n};\n\nfunction pGeom(t: number, param: tParamVal): tGeom {\n\tconst rGeome = initGeom(pDef.partName);\n\trGeome.logstr += `${rGeome.partName} simTime: ${t}\\n`;\n\ttry {\n\t\tconst figOne = figure();\n\t\tconst p1 = point(param.p1x, param.p1y + t);\n\t\tconst p2 = point(0, 0).setPolar(degToRad(param.p2a), param.p2l);\n\t\tconst p3 = p1.rotateOrig(degToRad(param.rotateOrig));\n\t\tconst p4 = p1.scaleOrig(param.scaleOrig);\n\t\tfigOne.addPoint(p1);\n\t\tfigOne.addPoint(p2);\n\t\tfigOne.addPoint(p3);\n\t\tfigOne.addPoint(p4);\n\t\trGeome.fig = { one: figOne };\n\t\trGeome.logstr += 'verify_point draw successfully!\\n';\n\t\trGeome.calcErr = false;\n\t} catch (emsg) {\n\t\trGeome.logstr += emsg as string;\n\t\tconsole.log(emsg as string);\n\t}\n\treturn rGeome;\n}\n\nconst verifyPoint1Def: tPageDef = {\n\tpTitle: 'Verify point',\n\tpDescription: 'Debugging point.ts',\n\tpDef: pDef,\n\tpGeom: pGeom\n};\n\nexport { verifyPoint1Def };\n","// verify_point_2.ts\n\nimport type { tParamDef, tParamVal, tGeom, tPageDef } from 'geometrix';\nimport { point, figure, pNumber, initGeom } from 'geometrix';\n\nconst pDef: tParamDef = {\n\tpartName: 'verify_point_2',\n\tparams: [\n\t\t//pNumber(name, unit, init, min, max, step)\n\t\tpNumber('p1x', 'mm', 30, -200, 200, 1),\n\t\tpNumber('p1y', 'mm', 50, -200, 200, 1),\n\t\tpNumber('p2x', 'mm', -10, -200, 200, 1),\n\t\tpNumber('p2y', 'mm', 60, -200, 200, 1),\n\t\tpNumber('p3x', 'mm', 70, -200, 200, 1),\n\t\tpNumber('p3y', 'mm', -20, -200, 200, 1),\n\t\tpNumber('dist', 'mm', 50, 0, 200, 1)\n\t],\n\tparamSvg: {\n\t\tp1x: 'verify_line_p1x.svg',\n\t\tp1y: 'verify_line_p1x.svg',\n\t\tp2x: 'verify_line_p1x.svg',\n\t\tp2y: 'verify_line_p1x.svg',\n\t\tp3x: 'verify_line_p1x.svg',\n\t\tp3y: 'verify_line_p1x.svg',\n\t\tdist: 'default_param_blank.svg'\n\t},\n\tsim: {\n\t\ttMax: 10,\n\t\ttStep: 0.1,\n\t\ttUpdate: 500 // every 0.5 second\n\t}\n};\n\nfunction pGeom(t: number, param: tParamVal): tGeom {\n\tconst rGeome = initGeom(pDef.partName);\n\trGeome.logstr += `${rGeome.partName} simTime: ${t}\\n`;\n\ttry {\n\t\tconst figOne = figure();\n\t\tconst p1 = point(param.p1x, param.p1y + t);\n\t\tconst p2 = point(param.p2x, param.p2y);\n\t\tconst p3 = point(param.p3x, param.p3y);\n\t\tconst mp1p2 = p1.middlePoint(p2);\n\t\tconst ep1p2 = p1.equidistantPoint(p2, param.dist, p3);\n\t\tfigOne.addPoint(p1);\n\t\tfigOne.addPoint(p2);\n\t\tfigOne.addPoint(p3);\n\t\tfigOne.addPoint(mp1p2);\n\t\tfigOne.addPoint(ep1p2);\n\t\trGeome.fig = { one: figOne };\n\t\trGeome.logstr += 'verify_point_2 draw successfully!\\n';\n\t\trGeome.calcErr = false;\n\t} catch (emsg) {\n\t\trGeome.logstr += emsg as string;\n\t\tconsole.log(emsg as string);\n\t}\n\treturn rGeome;\n}\n\nconst verifyPoint2Def: tPageDef = {\n\tpTitle: 'Verify point 2',\n\tpDescription: 'Debugging more point.ts',\n\tpDef: pDef,\n\tpGeom: pGeom\n};\n\nexport { verifyPoint2Def };\n","// verify_line.ts\n\nimport type { tParamDef, tParamVal, tGeom, tPageDef } from 'geometrix';\nimport { point, line, linePP, figure, pNumber, initGeom } from 'geometrix';\n\nconst pDef: tParamDef = {\n\tpartName: 'verify_line',\n\tparams: [\n\t\t//pNumber(name, unit, init, min, max, step)\n\t\tpNumber('p1x', 'mm', 30, -200, 200, 1),\n\t\tpNumber('p1y', 'mm', 50, -200, 200, 1),\n\t\tpNumber('p2x', 'mm', 40, -200, 200, 1),\n\t\tpNumber('p2y', 'mm', -20, -200, 200, 1),\n\t\tpNumber('p3x', 'mm', -30, -200, 200, 1),\n\t\tpNumber('p3y', 'mm', 30, -200, 200, 1)\n\t],\n\tparamSvg: {\n\t\tp1x: 'verify_line_p1x.svg',\n\t\tp1y: 'verify_line_p1x.svg',\n\t\tp2x: 'verify_line_p1x.svg',\n\t\tp2y: 'verify_line_p1x.svg',\n\t\tp3x: 'verify_line_p1x.svg',\n\t\tp3y: 'verify_line_p1x.svg'\n\t},\n\tsim: {\n\t\ttMax: 10,\n\t\ttStep: 0.1,\n\t\ttUpdate: 500 // every 0.5 second\n\t}\n};\n\nfunction pGeom(t: number, param: tParamVal): tGeom {\n\tconst rGeome = initGeom(pDef.partName);\n\trGeome.logstr += `${rGeome.partName} simTime: ${t}\\n`;\n\ttry {\n\t\tconst figOne = figure();\n\t\tconst p1 = point(param.p1x, param.p1y + t);\n\t\tconst p2 = point(param.p2x, param.p2y);\n\t\tconst p3 = point(param.p3x, param.p3y);\n\t\tfigOne.addPoint(p1);\n\t\tfigOne.addPoint(p2);\n\t\tfigOne.addPoint(p3);\n\t\tconst l1 = line(0, 0, 0).setFromPoints(p1, p2);\n\t\tfigOne.addLine(l1);\n\t\t//figOne.addLine(l2);\n\t\tfigOne.addPoint(point(l1.getAxisXIntersection(), 0));\n\t\tfigOne.addPoint(point(0, l1.getAxisYIntersection()));\n\t\tconst p4 = l1.projectOrig();\n\t\tfigOne.addPoint(p4);\n\t\tconst p0 = point(0, 0);\n\t\tif (!p0.isEqual(p4)) {\n\t\t\tconst l2 = linePP(p0, p4);\n\t\t\tfigOne.addLine(l2);\n\t\t}\n\t\tfigOne.addLine(l1.lineOrthogonal(p3));\n\t\tfigOne.addLine(l1.lineParallel(p3));\n\t\tfigOne.addPoint(l1.projectPoint(p3));\n\t\trGeome.fig = { one: figOne };\n\t\trGeome.logstr += `dist(l1, p3) = ${l1.distanceToPoint(p3)}\\n`;\n\t\trGeome.logstr += 'verify_line draw successfully!\\n';\n\t\trGeome.calcErr = false;\n\t} catch (emsg) {\n\t\trGeome.logstr += emsg as string;\n\t\tconsole.log(emsg as string);\n\t}\n\treturn rGeome;\n}\n\nconst verifyLine1Def: tPageDef = {\n\tpTitle: 'Verify line',\n\tpDescription: 'Debugging line.ts',\n\tpDef: pDef,\n\tpGeom: pGeom\n};\n\nexport { verifyLine1Def };\n","// verify_line_2.ts\n\nimport type { tParamDef, tParamVal, tGeom, tPageDef } from 'geometrix';\nimport { degToRad, point, line, figure, pNumber, initGeom } from 'geometrix';\n\nconst pDef: tParamDef = {\n\tpartName: 'verify_line_2',\n\tparams: [\n\t\t//pNumber(name, unit, init, min, max, step)\n\t\tpNumber('l1cx', 'mm', 10, -200, 200, 1),\n\t\tpNumber('l1cy', 'mm', 20, -200, 200, 1),\n\t\tpNumber('l1ca', 'degree', 15, -200, 200, 1),\n\t\tpNumber('l2cx', 'mm', 30, -200, 200, 1),\n\t\tpNumber('l2cy', 'mm', 50, -200, 200, 1),\n\t\tpNumber('l2ca', 'degree', 35, -200, 200, 1),\n\t\tpNumber('p3x', 'mm', -30, -200, 200, 1),\n\t\tpNumber('p3y', 'mm', 30, -200, 200, 1)\n\t],\n\tparamSvg: {\n\t\tl1cx: 'verify_line_2_l1cx.svg',\n\t\tl1cy: 'verify_line_2_l1cx.svg',\n\t\tl1ca: 'verify_line_2_l1cx.svg',\n\t\tl2cx: 'verify_line_2_l1cx.svg',\n\t\tl2cy: 'verify_line_2_l1cx.svg',\n\t\tl2ca: 'verify_line_2_l1cx.svg',\n\t\tp3x: 'verify_line_2_l1cx.svg',\n\t\tp3y: 'verify_line_2_l1cx.svg'\n\t},\n\tsim: {\n\t\ttMax: 100,\n\t\ttStep: 0.1,\n\t\ttUpdate: 500 // every 0.5 second\n\t}\n};\n\nfunction pGeom(t: number, param: tParamVal): tGeom {\n\tconst rGeome = initGeom(pDef.partName);\n\trGeome.logstr += `${rGeome.partName} simTime: ${t}\\n`;\n\ttry {\n\t\tconst figOne = figure();\n\t\tconst p1 = point(param.l1cx, param.l1cy);\n\t\tconst p2 = point(param.l2cx, param.l2cy);\n\t\tconst p3 = point(param.p3x, param.p3y);\n\t\tfigOne.addPoint(p1);\n\t\tfigOne.addPoint(p2);\n\t\tfigOne.addPoint(p3);\n\t\tconst l1 = line(param.l1cx, param.l1cy, degToRad(param.l1ca + t));\n\t\tconst l2 = line(param.l2cx, param.l2cy, degToRad(param.l2ca));\n\t\tfigOne.addLine(l1);\n\t\tfigOne.addLine(l2);\n\t\tfigOne.addPoint(l1.intersection(l2));\n\t\tfigOne.addPoint(l1.projectPoint(p3));\n\t\trGeome.logstr += `dist(l1, p3) = ${l1.distanceToPoint(p3)}\\n`;\n\t\tfigOne.addPoint(l2.projectPoint(p3));\n\t\trGeome.logstr += `dist(l2, p3) = ${l2.distanceToPoint(p3)}\\n`;\n\t\tconst bisector = l1.bisector(l2, p3);\n\t\tconst pBisec = point(bisector.cx, bisector.cy).translatePolar(bisector.ca, 30);\n\t\tfigOne.addPoint(pBisec);\n\t\trGeome.fig = { one: figOne };\n\t\trGeome.logstr += 'verify_line_2 draw successfully!\\n';\n\t\trGeome.calcErr = false;\n\t} catch (emsg) {\n\t\trGeome.logstr += emsg as string;\n\t\tconsole.log(emsg as string);\n\t}\n\treturn rGeome;\n}\n\nconst verifyLine2Def: tPageDef = {\n\tpTitle: 'Verify line 2',\n\tpDescription: 'Debugging more line.ts',\n\tpDef: pDef,\n\tpGeom: pGeom\n};\n\nexport { verifyLine2Def };\n","// verify_line_3.ts\n\nimport type { tParamDef, tParamVal, tGeom, tPageDef } from 'geometrix';\nimport { point, bisector, circleCenter, figure, pNumber, initGeom } from 'geometrix';\n\nconst pDef: tParamDef = {\n\tpartName: 'verify_line_3',\n\tparams: [\n\t\t//pNumber(name, unit, init, min, max, step)\n\t\tpNumber('p1x', 'mm', 30, -200, 200, 1),\n\t\tpNumber('p1y', 'mm', 50, -200, 200, 1),\n\t\tpNumber('p2x', 'mm', 40, -200, 200, 1),\n\t\tpNumber('p2y', 'mm', -20, -200, 200, 1),\n\t\tpNumber('p3x', 'mm', -30, -200, 200, 1),\n\t\tpNumber('p3y', 'mm', 30, -200, 200, 1)\n\t],\n\tparamSvg: {\n\t\tp1x: 'verify_line_p1x.svg',\n\t\tp1y: 'verify_line_p1x.svg',\n\t\tp2x: 'verify_line_p1x.svg',\n\t\tp2y: 'verify_line_p1x.svg',\n\t\tp3x: 'verify_line_p1x.svg',\n\t\tp3y: 'verify_line_p1x.svg'\n\t},\n\tsim: {\n\t\ttMax: 10,\n\t\ttStep: 0.1,\n\t\ttUpdate: 500 // every 0.5 second\n\t}\n};\n\nfunction pGeom(t: number, param: tParamVal): tGeom {\n\tconst rGeome = initGeom(pDef.partName);\n\trGeome.logstr += `${rGeome.partName} simTime: ${t}\\n`;\n\ttry {\n\t\tconst figOne = figure();\n\t\tconst p1 = point(param.p1x, param.p1y + t);\n\t\tconst p2 = point(param.p2x, param.p2y);\n\t\tconst p3 = point(param.p3x, param.p3y);\n\t\tfigOne.addPoint(p1);\n\t\tfigOne.addPoint(p2);\n\t\tfigOne.addPoint(p3);\n\t\tconst l1 = bisector(p1, p2);\n\t\tfigOne.addLine(l1);\n\t\tconst pCenter = circleCenter(p1, p2, p3);\n\t\tfigOne.addPoint(pCenter);\n\t\trGeome.fig = { one: figOne };\n\t\trGeome.logstr += 'verify_line_3 draw successfully!\\n';\n\t\trGeome.calcErr = false;\n\t} catch (emsg) {\n\t\trGeome.logstr += emsg as string;\n\t\tconsole.log(emsg as string);\n\t}\n\treturn rGeome;\n}\n\nconst verifyLine3Def: tPageDef = {\n\tpTitle: 'Verify line 3',\n\tpDescription: 'Debugging more more line.ts',\n\tpDef: pDef,\n\tpGeom: pGeom\n};\n\nexport { verifyLine3Def };\n","// verify_vector.ts\n\nimport type { tParamDef, tParamVal, tGeom, tPageDef } from 'geometrix';\nimport { degToRad, point, vector, figure, pNumber, initGeom } from 'geometrix';\n\nconst pDef: tParamDef = {\n\tpartName: 'verify_vector',\n\tparams: [\n\t\t//pNumber(name, unit, init, min, max, step)\n\t\tpNumber('p1x', 'mm', 30, -200, 200, 1),\n\t\tpNumber('p1y', 'mm', 50, -200, 200, 1),\n\t\tpNumber('p2x', 'mm', 80, -200, 200, 1),\n\t\tpNumber('p2y', 'mm', -30, -200, 200, 1),\n\t\tpNumber('v1a', 'degree', 30, -200, 200, 1),\n\t\tpNumber('v1l', 'mm', 60, 0, 200, 1),\n\t\tpNumber('v2a', 'degree', 30, -200, 200, 1),\n\t\tpNumber('v2l', 'mm', 60, 0, 200, 1)\n\t],\n\tparamSvg: {\n\t\tp1x: 'verify_vector_p1x.svg',\n\t\tp1y: 'verify_vector_p1x.svg',\n\t\tp2x: 'verify_vector_p1x.svg',\n\t\tp2y: 'verify_vector_p1x.svg',\n\t\tv1a: 'verify_vector_p1x.svg',\n\t\tv1l: 'verify_vector_p1x.svg',\n\t\tv2a: 'verify_vector_p1x.svg',\n\t\tv2l: 'verify_vector_p1x.svg'\n\t},\n\tsim: {\n\t\ttMax: 10,\n\t\ttStep: 0.1,\n\t\ttUpdate: 500 // every 0.5 second\n\t}\n};\n\nfunction pGeom(t: number, param: tParamVal): tGeom {\n\tconst rGeome = initGeom(pDef.partName);\n\trGeome.logstr += `${rGeome.partName} simTime: ${t}\\n`;\n\ttry {\n\t\tconst figOne = figure();\n\t\tconst p1 = point(param.p1x, param.p1y + t);\n\t\tconst p2 = point(param.p2x, param.p2y);\n\t\tconst v1 = vector(degToRad(param.v1a), param.v1l, p1);\n\t\tconst v2 = vector(degToRad(param.v2a), param.v2l, p1);\n\t\tfigOne.addPoint(p1);\n\t\tfigOne.addPoint(p2);\n\t\tfigOne.addVector(v1);\n\t\tfigOne.addVector(v2);\n\t\tconst v3 = v1.add(v2);\n\t\tconst p3 = v3.translatePoint(p2);\n\t\tfigOne.addVector(v3);\n\t\tfigOne.addPoint(p3);\n\t\trGeome.fig = { one: figOne };\n\t\trGeome.logstr += 'verify_vector draw successfully!\\n';\n\t\trGeome.calcErr = false;\n\t} catch (emsg) {\n\t\trGeome.logstr += emsg as string;\n\t\tconsole.log(emsg);\n\t}\n\treturn rGeome;\n}\n\nconst verifyVector1Def: tPageDef = {\n\tpTitle: 'Verify vector',\n\tpDescription: 'Debugging vector.ts',\n\tpDef: pDef,\n\tpGeom: pGeom\n};\n\nexport { verifyVector1Def };\n","// verify_contour_1.ts\n\nimport type { tParamDef, tParamVal, tGeom, tPageDef } from 'geometrix';\nimport { contour, contourCircle, figure, pNumber, initGeom } from 'geometrix';\n\nconst pDef: tParamDef = {\n\tpartName: 'verify_contour_1',\n\tparams: [\n\t\t//pNumber(name, unit, init, min, max, step)\n\t\tpNumber('r1', 'mm', 30, 10, 200, 1),\n\t\tpNumber('d1', 'mm', 20, 10, 200, 1),\n\t\tpNumber('w1', 'mm', 100, 10, 200, 1),\n\t\tpNumber('r2', 'mm', 60, 10, 200, 1),\n\t\tpNumber('l1', 'mm', 10, 5, 200, 1),\n\t\tpNumber('l2', 'mm', 30, 5, 200, 1)\n\t],\n\tparamSvg: {\n\t\tr1: 'verify_contour_1_r1.svg',\n\t\td1: 'verify_contour_1_r1.svg',\n\t\tw1: 'verify_contour_1_r1.svg',\n\t\tr2: 'verify_contour_1_r1.svg',\n\t\tl1: 'verify_contour_1_l1.svg',\n\t\tl2: 'verify_contour_1_l1.svg'\n\t},\n\tsim: {\n\t\ttMax: 10,\n\t\ttStep: 0.5,\n\t\ttUpdate: 500 // every 0.5 second\n\t}\n};\n\nfunction pGeom(t: number, param: tParamVal): tGeom {\n\tconst rGeome = initGeom(pDef.partName);\n\trGeome.logstr += `${rGeome.partName} simTime: ${t}\\n`;\n\ttry {\n\t\tconst figOne = figure();\n\t\tconst r1 = param.r1;\n\t\tconst d1 = param.d1;\n\t\tconst w1 = param.w1;\n\t\tconst r2 = param.r2;\n\t\tconst l1 = param.l1;\n\t\tconst l2 = param.l2;\n\t\tconst h1 = 6 * r1 + 4 * d1;\n\t\tconst w12 = w1 / 2;\n\t\tconst c1 = d1 + r1;\n\t\tconst c12 = 2 * r1 + d1;\n\t\tconst c2 = c1 + c12;\n\t\tconst c3 = c1 + 2 * c12;\n\t\tconst ctr1 = contour(0, 0);\n\t\tctr1.addSegStrokeA(w1, 0);\n\t\tctr1.addSegStrokeA(w1, h1);\n\t\tctr1.addSegStrokeA(0, h1);\n\t\tctr1.closeSegStroke();\n\t\tctr1.check();\n\t\tfigOne.addMain(ctr1);\n\t\tfigOne.addMain(contourCircle(w12, c1, r1));\n\t\tfigOne.addMain(contourCircle(w12, c2, r1 + t));\n\t\tfigOne.addMain(contourCircle(w12, c3, r1));\n\t\tconst ctr2 = contourCircle(w1 + r2, 3 * c1, r2);\n\t\tctr2.check();\n\t\tfigOne.addSecond(ctr2);\n\t\tconst ctr3 = contour(200 + l1, 200)\n\t\t\t.addSegStrokeA(200 + l1 + l2, 200)\n\t\t\t.addSegStrokeR(0, l1)\n\t\t\t.addSegStrokeRP(0, l1)\n\t\t\t.addSegStrokeRP(Math.PI / 2, l2)\n\t\t\t.addSegStrokeAP(Math.PI / 4, Math.sqrt(2) * (200 + l1 + l2))\n\t\t\t.addSegStrokeA(200 + l1 + l2, 200 + 2 * l1 + l2)\n\t\t\t.addSegStrokeR(-l2, 0)\n\t\t\t.addSegStrokeR(0, -l1)\n\t\t\t.addSegStrokeR(-l1, 0)\n\t\t\t.addSegStrokeRP(-Math.PI / 2, l2)\n\t\t\t.addSegStrokeR(l1, 0)\n\t\t\t.closeSegStroke();\n\t\tctr3.check();\n\t\tfigOne.addSecond(ctr3);\n\t\trGeome.fig = { one: figOne };\n\t\trGeome.logstr += 'verify_contour_1 draw successfully!\\n';\n\t\trGeome.calcErr = false;\n\t} catch (emsg) {\n\t\trGeome.logstr += emsg as string;\n\t\tconsole.log(emsg);\n\t}\n\treturn rGeome;\n}\n\nconst verifyContour1Def: tPageDef = {\n\tpTitle: 'Verify contour 1',\n\tpDescription: 'Debugging contour.ts',\n\tpDef: pDef,\n\tpGeom: pGeom\n};\n\nexport { verifyContour1Def };\n","// verify_contour_2.ts\n\nimport type { tParamDef, tParamVal, tGeom, tPageDef } from 'geometrix';\nimport { degToRad, contour, figure, pNumber, initGeom } from 'geometrix';\n\nconst pDef: tParamDef = {\n\tpartName: 'verify_contour_2',\n\tparams: [\n\t\t//pNumber(name, unit, init, min, max, step)\n\t\tpNumber('r1', 'mm', 20, 5, 200, 1),\n\t\tpNumber('a1', 'deg', 30, -200, 200, 1),\n\t\tpNumber('at1', 'deg', 30, -200, 200, 1),\n\t\tpNumber('at2', 'deg', 50, -200, 200, 1)\n\t],\n\tparamSvg: {\n\t\tr1: 'verify_contour_1_r1.svg',\n\t\ta1: 'verify_contour_1_r1.svg',\n\t\tat1: 'verify_contour_1_r1.svg',\n\t\tat2: 'verify_contour_1_r1.svg'\n\t},\n\tsim: {\n\t\ttMax: 10,\n\t\ttStep: 0.5,\n\t\ttUpdate: 500 // every 0.5 second\n\t}\n};\n\nfunction pGeom(t: number, param: tParamVal): tGeom {\n\tconst rGeome = initGeom(pDef.partName);\n\trGeome.logstr += `${rGeome.partName} simTime: ${t}\\n`;\n\ttry {\n\t\tconst figOne = figure();\n\t\tconst r1 = param.r1 + t;\n\t\tconst ata = param.a1 + t;\n\t\tconst at1 = param.at1 + t;\n\t\tconst at2 = param.at2 + t;\n\t\tconst ctr1 = contour(20, 20);\n\t\tctr1.addSegStrokeA(40, 20);\n\t\tctr1.addPointA(60, 20).addSegArc(r1, true, true);\n\t\tctr1.addPointA(80, 20).addSegArc(r1, true, false);\n\t\tctr1.addPointA(100, 20).addSegArc(r1, false, true);\n\t\tctr1.addPointA(120, 20).addSegArc(r1, false, false);\n\t\tctr1.addSegStrokeA(140, 20);\n\t\tctr1.addSegStrokeA(140, 40);\n\t\tctr1.addPointA(140, 60).addSegArc(r1, true, true);\n\t\tctr1.addPointA(140, 80).addSegArc(r1, true, false);\n\t\tctr1.addPointA(140, 100).addSegArc(r1, false, true);\n\t\tctr1.addPointA(140, 120).addSegArc(r1, false, false);\n\t\tctr1.addSegStrokeA(140, 140);\n\t\tctr1.addSegStrokeA(120, 140);\n\t\tctr1.addPointA(100, 140).addSegArc(r1, true, true);\n\t\tctr1.addPointA(80, 140).addSegArc(r1, true, false);\n\t\tctr1.addPointA(60, 140).addSegArc(r1, false, true);\n\t\tctr1.addPointA(40, 140).addSegArc(r1, false, false);\n\t\tctr1.addSegStrokeA(20, 140);\n\t\tctr1.addSegStrokeA(20, 120);\n\t\tctr1.addPointA(20, 100).addSegArc(r1, true, true);\n\t\tctr1.addPointA(20, 80).addSegArc(r1, true, false);\n\t\tctr1.addPointA(20, 60).addSegArc(r1, false, true);\n\t\tctr1.addPointA(20, 40).addSegArc(r1, false, false);\n\t\tctr1.closeSegStroke();\n\t\tctr1.check(); // throw an exception if any error\n\t\tfigOne.addMain(ctr1);\n\t\tconst ctr2 = contour(20, -20);\n\t\tctr2.addSegStrokeA(40, -40);\n\t\tctr2.addPointA(60, -60).addSegArc(r1, true, true);\n\t\tctr2.addPointA(80, -80).addSegArc(r1, true, false);\n\t\tctr2.addPointA(100, -100).addSegArc(r1, false, true);\n\t\tctr2.addPointA(120, -120).addSegArc(r1, false, false);\n\t\tctr2.addSegStrokeA(140, -140);\n\t\tctr2.addSegStrokeR(20, 20)\n\t\t\t.addPointR(20, 20)\n\t\t\t.addSegArc(r1, false, false)\n\t\t\t.addPointRP(Math.PI / 4, 28)\n\t\t\t.addSegArc(r1, false, true)\n\t\t\t.addPointRP(Math.PI / 4, 28)\n\t\t\t.addSegArc(r1, true, true)\n\t\t\t.addPointRP(Math.PI / 4, 28)\n\t\t\t.addSegArc(r1, true, false)\n\t\t\t.addSegStrokeRP(Math.PI / 4, 20)\n\t\t\t.addSegStrokeRP(-Math.PI / 4, 20)\n\t\t\t.addPointR(10, -9)\n\t\t\t.addPointR(20, -20)\n\t\t\t.addSegArc2()\n\t\t\t.addPointR(20, -9)\n\t\t\t.addPointR(20, -20)\n\t\t\t.addSegArc2()\n\t\t\t.addPointR(9, -6)\n\t\t\t.addPointR(20, -20)\n\t\t\t.addSegArc2()\n\t\t\t.addPointR(9, -14)\n\t\t\t.addPointR(20, -20)\n\t\t\t.addSegArc2()\n\t\t\t.addPointR(9, 0)\n\t\t\t.addPointR(20, -20)\n\t\t\t.addSegArc2()\n\t\t\t.addSegStrokeR(20, -20)\n\t\t\t.addSegStrokeR(20, 20)\n\t\t\t.addPointR(9, 20)\n\t\t\t.addPointR(20, 20)\n\t\t\t.addSegArc2()\n\t\t\t.addPointR(20, 10)\n\t\t\t.addPointR(20, 20)\n\t\t\t.addSegArc2()\n\t\t\t.addPointR(9, 6)\n\t\t\t.addPointR(20, 20)\n\t\t\t.addSegArc2()\n\t\t\t.addPointR(9, 14)\n\t\t\t.addPointR(20, 20)\n\t\t\t.addSegArc2()\n\t\t\t.addPointR(9, 0)\n\t\t\t.addPointR(20, 20)\n\t\t\t.addSegArc2()\n\t\t\t.addSegStrokeR(20, 20)\n\t\t\t.addSegStrokeR(0, 20)\n\t\t\t.addPointR(15, 8)\n\t\t\t.addPointR(0, 20)\n\t\t\t.addSegArc2()\n\t\t\t.addPointR(-15, 8)\n\t\t\t.addPointR(0, 20)\n\t\t\t.addSegArc2()\n\t\t\t.addPointR(5, 8)\n\t\t\t.addPointR(0, 20)\n\t\t\t.addSegArc2()\n\t\t\t.addPointR(-5, 8)\n\t\t\t.addPointR(0, 20)\n\t\t\t.addSegArc2()\n\t\t\t.addSegStrokeR(0, 20)\n\t\t\t.addSegStrokeR(20, 0)\n\t\t\t.addPointR(8, 15)\n\t\t\t.addPointR(20, 0)\n\t\t\t.addSegArc2()\n\t\t\t.addPointR(8, -15)\n\t\t\t.addPointR(20, 0)\n\t\t\t.addSegArc2()\n\t\t\t.addPointR(8, 5)\n\t\t\t.addPointR(20, 0)\n\t\t\t.addSegArc2()\n\t\t\t.addPointR(8, -5)\n\t\t\t.addPointR(20, 0)\n\t\t\t.addSegArc2()\n\t\t\t.addSegStrokeR(20, 0)\n\t\t\t.addSegStrokeR(0, -20)\n\t\t\t.addPointR(15, -8)\n\t\t\t.addPointR(0, -20)\n\t\t\t.addSegArc2()\n\t\t\t.addPointR(-15, -8)\n\t\t\t.addPointR(0, -20)\n\t\t\t.addSegArc2()\n\t\t\t.addPointR(5, -8)\n\t\t\t.addPointR(0, -20)\n\t\t\t.addSegArc2()\n\t\t\t.addPointR(-5, -8)\n\t\t\t.addPointR(0, -20)\n\t\t\t.addSegArc2()\n\t\t\t.addSegStrokeR(0, -20)\n\t\t\t.addSegStrokeR(-20, 0)\n\t\t\t.addPointR(-8, 15)\n\t\t\t.addPointR(-20, 0)\n\t\t\t.addSegArc2()\n\t\t\t.addPointR(-8, -15)\n\t\t\t.addPointR(-20, 0)\n\t\t\t.addSegArc2()\n\t\t\t.addPointR(-8, 5)\n\t\t\t.addPointR(-20, 0)\n\t\t\t.addSegArc2()\n\t\t\t.addPointR(-8, -5)\n\t\t\t.addPointR(-20, 0)\n\t\t\t.addSegArc2()\n\t\t\t.addSegStrokeR(-20, 0)\n\t\t\t.closeSegStroke();\n\t\tctr2.check(); // throw an exception if any error\n\t\tfigOne.addMain(ctr2);\n\t\tconst ctr3 = contour(200, 200)\n\t\t\t.addSegStrokeR(20, 0)\n\t\t\t.addPointR(20, 0)\n\t\t\t.addSegArc3(degToRad(ata), true)\n\t\t\t.addSegStrokeR(20, 0)\n\t\t\t.addPointR(20, 0)\n\t\t\t.addSegArc3(degToRad(ata), false)\n\t\t\t.addSegStrokeR(20, 0)\n\t\t\t.addSegStrokeR(0, 20)\n\t\t\t.addPointR(0, 20)\n\t\t\t.addSegArc3(degToRad(ata), true)\n\t\t\t.addSegStrokeR(0, 20)\n\t\t\t.addPointR(0, 20)\n\t\t\t.addSegArc3(degToRad(ata), false)\n\t\t\t.addSegStrokeR(0, 20)\n\t\t\t.addSegStrokeR(-20, 0)\n\t\t\t.addPointR(-20, 0)\n\t\t\t.addSegArc3(degToRad(ata), true)\n\t\t\t.addSegStrokeR(-20, 0)\n\t\t\t.addPointR(-20, 0)\n\t\t\t.addSegArc3(degToRad(ata), false)\n\t\t\t.addSegStrokeR(-20, 0)\n\t\t\t.addSegStrokeR(0, -20)\n\t\t\t.addPointR(0, -20)\n\t\t\t.addSegArc3(degToRad(ata), true)\n\t\t\t.addSegStrokeR(0, -20)\n\t\t\t.addPointR(0, -20)\n\t\t\t.addSegArc3(degToRad(ata), false)\n\t\t\t.addSegStrokeR(0, -20);\n\t\tctr3.check(); // throw an exception if any error\n\t\tfigOne.addMain(ctr3);\n\t\tconst ctr4 = contour(600, 200)\n\t\t\t.addSegStrokeR(20, 20)\n\t\t\t.addPointR(20, 20)\n\t\t\t.addSegArc3(degToRad(ata), true)\n\t\t\t.addSegStrokeR(20, 20)\n\t\t\t.addPointR(20, 20)\n\t\t\t.addSegArc3(degToRad(ata), false)\n\t\t\t.addSegStrokeR(20, 20)\n\t\t\t.addSegStrokeR(-20, 20)\n\t\t\t.addPointR(-20, 20)\n\t\t\t.addSegArc3(degToRad(ata), true)\n\t\t\t.addSegStrokeR(-20, 20)\n\t\t\t.addPointR(-20, 20)\n\t\t\t.addSegArc3(degToRad(ata), false)\n\t\t\t.addSegStrokeR(-20, 20)\n\t\t\t.addSegStrokeR(-20, -20)\n\t\t\t.addPointR(-20, -20)\n\t\t\t.addSegArc3(degToRad(ata), true)\n\t\t\t.addSegStrokeR(-20, -20)\n\t\t\t.addPointR(-20, -20)\n\t\t\t.addSegArc3(degToRad(ata), false)\n\t\t\t.addSegStrokeR(-20, -20)\n\t\t\t.addSegStrokeR(20, -20)\n\t\t\t.addPointR(20, -20)\n\t\t\t.addSegArc3(degToRad(ata), true)\n\t\t\t.addSegStrokeR(20, -20)\n\t\t\t.addPointR(20, -20)\n\t\t\t.addSegArc3(degToRad(ata), false)\n\t\t\t.addSegStrokeR(20, -20);\n\t\tctr4.check(); // throw an exception if any error\n\t\tfigOne.addMain(ctr4);\n\t\tconst ctr5 = contour(100, 500);\n\t\tfor (let i = 0; i < 8; i++) {\n\t\t\tconst adir = i * 45;\n\t\t\tconst adirRad = degToRad(adir);\n\t\t\tctr5.addSegStrokeRP(adirRad, 20)\n\t\t\t\t.addPointRP(adirRad, 20)\n\t\t\t\t.addSeg2Arcs(degToRad(adir + at1), degToRad(180 + adir - at2))\n\t\t\t\t.addSegStrokeRP(adirRad, 20)\n\t\t\t\t.addPointRP(adirRad, 20)\n\t\t\t\t.addSeg2Arcs(degToRad(adir - at1), degToRad(180 + adir + at2))\n\t\t\t\t.addSegStrokeRP(adirRad, 20);\n\t\t}\n\t\tctr5.check(); // throw an exception if any error\n\t\tfigOne.addMain(ctr5);\n\t\trGeome.fig = { one: figOne };\n\t\trGeome.logstr += 'verify_contour_2 draw successfully!\\n';\n\t\trGeome.calcErr = false;\n\t} catch (emsg) {\n\t\trGeome.logstr += emsg as string;\n\t\tconsole.log(emsg);\n\t}\n\treturn rGeome;\n}\n\nconst verifyContour2Def: tPageDef = {\n\tpTitle: 'Verify contour 2',\n\tpDescription: 'Debugging more contour.ts',\n\tpDef: pDef,\n\tpGeom: pGeom\n};\n\nexport { verifyContour2Def };\n","// verify_contour_3.ts\n\nimport type { tParamDef, tParamVal, tGeom, tPageDef } from 'geometrix';\nimport { degToRad, contour, figure, pNumber, initGeom } from 'geometrix';\n\nconst pDef: tParamDef = {\n\tpartName: 'verify_contour_3',\n\tparams: [\n\t\t//pNumber(name, unit, init, min, max, step)\n\t\tpNumber('r1', 'mm', 10, 0, 200, 1),\n\t\tpNumber('r2', 'mm', 10, 0, 200, 1),\n\t\tpNumber('r3', 'mm', 10, 0, 200, 1),\n\t\tpNumber('r4', 'mm', 10, 0, 200, 1),\n\t\tpNumber('r5', 'mm', 10, 0, 200, 1),\n\t\tpNumber('r6', 'mm', 5, 0, 200, 1)\n\t],\n\tparamSvg: {\n\t\tr1: 'verify_contour_1_r1.svg',\n\t\tr2: 'verify_contour_1_r1.svg',\n\t\tr3: 'verify_contour_1_r1.svg',\n\t\tr4: 'verify_contour_1_r1.svg',\n\t\tr5: 'verify_contour_1_r1.svg',\n\t\tr6: 'verify_contour_1_r1.svg'\n\t},\n\tsim: {\n\t\ttMax: 10,\n\t\ttStep: 0.5,\n\t\ttUpdate: 500 // every 0.5 second\n\t}\n};\n\nfunction pGeom(t: number, param: tParamVal): tGeom {\n\tconst rGeome = initGeom(pDef.partName);\n\trGeome.logstr += `${rGeome.partName} simTime: ${t}\\n`;\n\ttry {\n\t\tconst figOne = figure();\n\t\tconst r1 = param.r1 + t;\n\t\tconst r2 = param.r2 + t;\n\t\tconst r3 = param.r3 + t;\n\t\tconst r4 = param.r4 + t;\n\t\tconst r5 = param.r5 + t;\n\t\tconst r6 = param.r6 + t;\n\t\tconst ctr1 = contour(100, 0)\n\t\t\t.addSegStrokeR(30, 200)\n\t\t\t.addCornerRounded(r1)\n\t\t\t.addSegStrokeR(200, 30)\n\t\t\t.addCornerRounded(r1)\n\t\t\t.addSegStrokeR(-200, 30)\n\t\t\t.addCornerRounded(r1)\n\t\t\t.addSegStrokeR(-30, 200)\n\t\t\t.addCornerRounded(r1)\n\t\t\t.addSegStrokeR(-30, -200)\n\t\t\t.addCornerRounded(r1)\n\t\t\t.addSegStrokeR(-200, -30)\n\t\t\t.addCornerRounded(r1)\n\t\t\t.addSegStrokeR(200, -30)\n\t\t\t.addCornerRounded(r1)\n\t\t\t.closeSegStroke()\n\t\t\t.addCornerRounded(r1);\n\t\trGeome.logstr += ctr1.check();\n\t\tfigOne.addMain(ctr1);\n\t\tconst l2 = 100;\n\t\tconst ctr2 = contour(300, 0);\n\t\tfor (let i = 0; i < 4; i++) {\n\t\t\tconst angle = 90 * (1 - i); // turning CW\n\t\t\tctr2.addSegStrokeRP(degToRad(angle), l2)\n\t\t\t\t.addCornerRounded(r2)\n\t\t\t\t.addSegStrokeRP(degToRad(angle - 45), l2)\n\t\t\t\t.addCornerRounded(r2)\n\t\t\t\t.addSegStrokeRP(degToRad(angle + 45), l2)\n\t\t\t\t.addCornerRounded(r2)\n\t\t\t\t.addSegStrokeRP(degToRad(angle), l2)\n\t\t\t\t.addCornerRounded(r2);\n\t\t}\n\t\trGeome.logstr += ctr2.check();\n\t\tfigOne.addMain(ctr2);\n\t\tconst l3 = 100;\n\t\tconst ra3 = 70;\n\t\tconst ctr3 = contour(0, 600).addSegStrokeR(l3, l3);\n\t\tfor (let i = 0; i < 3; i++) {\n\t\t\tconst large = (i & 0x1) === 0 ? false : true;\n\t\t\tconst ccw = (i & 0x2) === 0 ? false : true;\n\t\t\t//rGeome.logstr += `large ${large} ccw ${ccw}\\n`;\n\t\t\tctr3.addSegStrokeR(l3, 0)\n\t\t\t\t.addSegStrokeR(0, l3)\n\t\t\t\t.addCornerRounded(r3)\n\t\t\t\t.addPointR(l3, 0)\n\t\t\t\t.addSegArc(ra3, large, ccw)\n\t\t\t\t.addCornerRounded(r3)\n\t\t\t\t.addSegStrokeR(0, -l3);\n\t\t}\n\t\tfor (let i = 0; i < 8; i++) {\n\t\t\tconst sign = (i & 0x4) === 0 ? 1 : -1;\n\t\t\tconst large = (i & 0x2) === 0 ? false : true;\n\t\t\tconst ccw = (i & 0x1) === 0 ? false : true;\n\t\t\t//rGeome.logstr += `large ${large} ccw ${ccw}\\n`;\n\t\t\tctr3.addSegStrokeR(l3, 0)\n\t\t\t\t.addCornerRounded(r3)\n\t\t\t\t.addPointR(l3, 0)\n\t\t\t\t.addSegArc(ra3, large, ccw)\n\t\t\t\t.addCornerRounded(r3)\n\t\t\t\t.addSegStrokeR(l3, 0);\n\t\t\tctr3.addSegStrokeR(l3, (-sign * l3) / 8)\n\t\t\t\t.addCornerRounded(r3)\n\t\t\t\t.addPointR(l3, (sign * l3) / 4 - 3 * t)\n\t\t\t\t.addSegArc(ra3, large, ccw)\n\t\t\t\t.addCornerRounded(r3)\n\t\t\t\t.addSegStrokeR(l3, (-sign * l3) / 8);\n\t\t}\n\t\tctr3.addSegStrokeR(l3, 0).addSegStrokeR(l3, -l3).closeSegStroke();\n\t\trGeome.logstr += ctr3.check();\n\t\tfigOne.addMain(ctr3);\n\t\tconst ctr3b = contour(0, 900)\n\t\t\t.addCornerRounded(r3)\n\t\t\t.addPointR(l3, l3)\n\t\t\t.addSegArc(l3, false, true)\n\t\t\t.addSegStrokeR(0, 2 * l3)\n\t\t\t.addCornerRounded(r3)\n\t\t\t.addPointR(l3, -l3)\n\t\t\t.addSegArc(l3, false, true)\n\t\t\t.addSegStrokeR(l3, 0)\n\t\t\t.addCornerRounded(r3)\n\t\t\t.addPointR(l3, l3)\n\t\t\t.addSegArc(l3, false, false)\n\t\t\t.addCornerRounded(r3)\n\t\t\t.addSegStrokeR(0, 2 * l3)\n\t\t\t.addCornerRounded(r3)\n\t\t\t.addPointR(-l3, l3)\n\t\t\t.addSegArc(l3, false, false)\n\t\t\t.addPointR(l3, l3)\n\t\t\t.addSegArc(l3, false, false)\n\t\t\t.addCornerRounded(r3)\n\t\t\t.addSegStrokeR(0, 3 * l3)\n\t\t\t.addCornerRounded(r3)\n\t\t\t.addPointR(-l3, -l3)\n\t\t\t.addSegArc(l3, false, false)\n\t\t\t.addPointR(-l3, l3)\n\t\t\t.addSegArc(l3, false, false)\n\t\t\t.addCornerRounded(r3)\n\t\t\t.addSegStrokeR(0, -3 * l3)\n\t\t\t.addCornerRounded(r3)\n\t\t\t.addPointR(-l3, l3)\n\t\t\t.addSegArc(l3, false, true)\n\t\t\t.addSegStrokeR(-l3, 0)\n\t\t\t.closeSegStroke();\n\t\trGeome.logstr += ctr3b.check();\n\t\tfigOne.addMain(ctr3b);\n\t\tconst l4 = 200;\n\t\tconst ra4 = 180;\n\t\tconst ctr4 = contour(0, 2000)\n\t\t\t.addPointR(l4, 0)\n\t\t\t.addSegArc(ra4, false, true)\n\t\t\t.addCornerRounded(r4)\n\t\t\t.addPointR(0, l4)\n\t\t\t.addSegArc(ra4, false, true)\n\t\t\t.addCornerRounded(r4)\n\t\t\t.addPointR(-l4, -l4)\n\t\t\t.addSegArc(1.4 * ra4, false, true)\n\t\t\t.addCornerRounded(r4);\n\t\trGeome.logstr += ctr4.check();\n\t\tfigOne.addMain(ctr4);\n\t\tconst ctr4b = contour(400, 2000)\n\t\t\t.addPointR(0, 1.7 * l4)\n\t\t\t.addSegArc(2.3 * ra4, false, false)\n\t\t\t.addCornerRounded(r4)\n\t\t\t.addPointR(l4, -0.7 * l4)\n\t\t\t.addSegArc(ra4, false, false)\n\t\t\t.addCornerRounded(r4)\n\t\t\t.addPointR(-l4, -l4)\n\t\t\t.addSegArc(1.4 * ra4, false, false)\n\t\t\t.addCornerRounded(r4);\n\t\trGeome.logstr += ctr4b.check();\n\t\tfigOne.addMain(ctr4b);\n\t\tconst ctr4c = contour(1000, 2000)\n\t\t\t.addPointR(l4, 0)\n\t\t\t.addSegArc(0.6 * ra4, true, true)\n\t\t\t.addCornerRounded(r4)\n\t\t\t.addPointR(0, l4)\n\t\t\t.addSegArc(ra4, true, true)\n\t\t\t.addCornerRounded(r4)\n\t\t\t.addPointR(-l4, -l4)\n\t\t\t.addSegArc(1.4 * ra4, true, true)\n\t\t\t.addCornerRounded(r4);\n\t\trGeome.logstr += ctr4c.check();\n\t\tfigOne.addMain(ctr4c);\n\t\tconst ctr4d = contour(3000, 2000)\n\t\t\t.addPointR(0, 1.7 * l4)\n\t\t\t.addSegArc(2.3 * ra4, true, false)\n\t\t\t.addCornerRounded(r4)\n\t\t\t.addPointR(l4, -0.7 * l4)\n\t\t\t.addSegArc(ra4, true, false)\n\t\t\t.addCornerRounded(r4)\n\t\t\t.addPointR(-l4, -l4)\n\t\t\t.addSegArc(1.1 * ra4, true, false)\n\t\t\t.addCornerRounded(r4);\n\t\trGeome.logstr += ctr4d.check();\n\t\tfigOne.addMain(ctr4d);\n\t\tconst l4b = 3 * l4;\n\t\tconst ra4b = 3 * ra4;\n\t\tconst ctr4e = contour(3800, 2000)\n\t\t\t.addPointR(l4b, 0)\n\t\t\t.addSegArc(ra4b, false, false)\n\t\t\t.addCornerRounded(r4)\n\t\t\t.addPointR(0, l4b)\n\t\t\t.addSegArc(ra4b, false, false)\n\t\t\t.addCornerRounded(r4)\n\t\t\t.addPointR(-l4b, 0)\n\t\t\t.addSegArc(ra4b, false, false)\n\t\t\t.addCornerRounded(r4)\n\t\t\t.addPointR(0, -l4b)\n\t\t\t.addSegArc(ra4b, false, false)\n\t\t\t.addCornerRounded(r4);\n\t\trGeome.logstr += ctr4e.check();\n\t\tfigOne.addMain(ctr4e);\n\t\tconst ctr4f = contour(4500, 2000)\n\t\t\t.addPointR(l4, l4)\n\t\t\t.addSegArc(l4, false, false)\n\t\t\t.addPointR(l4, -l4)\n\t\t\t.addSegArc(l4, false, false)\n\t\t\t.addCornerRounded(r4)\n\t\t\t.addPointR(-l4, 1.6 * l4)\n\t\t\t.addSegArc(1.1 * ra4, false, true)\n\t\t\t.addCornerRounded(r4)\n\t\t\t.addPointR(-l4, -1.6 * l4)\n\t\t\t.addSegArc(1.2 * ra4, false, true)\n\t\t\t.addCornerRounded(r4);\n\t\trGeome.logstr += ctr4f.check();\n\t\tfigOne.addMain(ctr4f);\n\t\tconst ctr4g = contour(5200, 2000)\n\t\t\t.addPointR(l4, 0)\n\t\t\t.addSegArc(0.9 * l4, false, false)\n\t\t\t.addCornerRounded(r4)\n\t\t\t.addPointR(l4, 0)\n\t\t\t.addSegArc(0.9 * l4, false, false)\n\t\t\t.addCornerRounded(r4)\n\t\t\t.addPointR(-2 * l4, 0)\n\t\t\t.addSegArc(1.3 * l4, true, true)\n\t\t\t.addCornerRounded(r4);\n\t\trGeome.logstr += ctr4g.check();\n\t\tfigOne.addMain(ctr4g);\n\t\tconst c099 = 0.999;\n\t\tconst ctr4h = contour(6000, 2000)\n\t\t\t.addPointR(2 * l4, 2 * l4)\n\t\t\t.addSegArc(1.5 * l4, false, false)\n\t\t\t.addCornerRounded(r4)\n\t\t\t.addPointR(2 * l4, -2 * l4)\n\t\t\t.addSegArc(1.5 * l4, false, false)\n\t\t\t.addCornerRounded(r4)\n\t\t\t.addPointR(-l4, l4)\n\t\t\t.addSegArc(l4, false, true)\n\t\t\t.addPointR(-l4, -c099 * l4)\n\t\t\t.addSegArc(l4, false, true)\n\t\t\t.addCornerRounded(r4)\n\t\t\t.addPointR(-l4, c099 * l4)\n\t\t\t.addSegArc(l4, false, true)\n\t\t\t.addPointR(-l4, -l4)\n\t\t\t.addSegArc(l4, false, true)\n\t\t\t.addCornerRounded(r4);\n\t\trGeome.logstr += ctr4h.check();\n\t\tfigOne.addMain(ctr4h);\n\t\tconst l5 = 200;\n\t\tconst ra5 = 180;\n\t\tconst ctr5 = contour(0, 3000)\n\t\t\t.addSegStrokeR(l5, 0)\n\t\t\t.addCornerWidened(r5)\n\t\t\t.addSegStrokeR(0, l5)\n\t\t\t.addCornerWidened(r5)\n\t\t\t.closeSegStroke()\n\t\t\t.addCornerWidened(r5);\n\t\trGeome.logstr += ctr5.check();\n\t\tfigOne.addMain(ctr5);\n\t\tconst ctr5b = contour(400, 3000)\n\t\t\t.addSegStrokeR(l5, 0)\n\t\t\t.addCornerWidened(r5)\n\t\t\t.addPointR(0, l5)\n\t\t\t.addSegArc(ra5, false, true)\n\t\t\t.addCornerWidened(r5)\n\t\t\t.addPointR(-l5, 0)\n\t\t\t.addSegArc(ra5, false, false)\n\t\t\t.addCornerWidened(r5)\n\t\t\t.closeSegStroke()\n\t\t\t.addCornerWidened(r5);\n\t\trGeome.logstr += ctr5b.check();\n\t\tfigOne.addMain(ctr5b);\n\t\tconst ctr5d = contour(3000, 3000)\n\t\t\t.addPointR(0, 1.7 * l5)\n\t\t\t.addSegArc(2.3 * ra5, true, false)\n\t\t\t.addCornerWidened(r5)\n\t\t\t.addPointR(l5, -0.7 * l5)\n\t\t\t.addSegArc(ra5, true, false)\n\t\t\t.addCornerWidened(r5)\n\t\t\t.addPointR(-l5, -l5)\n\t\t\t.addSegArc(1.1 * ra5, true, false)\n\t\t\t.addCornerWidened(r5);\n\t\trGeome.logstr += ctr5d.check();\n\t\tfigOne.addMain(ctr5d);\n\t\tconst ctr5e = contour(3800, 3000)\n\t\t\t.addPointR(l5, 0)\n\t\t\t.addSegArc(ra5, false, false)\n\t\t\t.addCornerWidened(r5)\n\t\t\t.addPointR(0, l5)\n\t\t\t.addSegArc(ra5, false, false)\n\t\t\t.addCornerWidened(r5)\n\t\t\t.addPointR(-l5, 0)\n\t\t\t.addSegArc(ra5, false, false)\n\t\t\t.addCornerWidened(r5)\n\t\t\t.addPointR(0, -l5)\n\t\t\t.addSegArc(ra5, false, false)\n\t\t\t.addCornerWidened(r5);\n\t\trGeome.logstr += ctr5e.check();\n\t\tfigOne.addMain(ctr5e);\n\t\tconst ctr5f = contour(4500, 3000)\n\t\t\t.addPointR(l5, l5)\n\t\t\t.addSegArc(l5, false, false)\n\t\t\t.addPointR(l5, -l5)\n\t\t\t.addSegArc(l5, false, false)\n\t\t\t.addCornerWidened(r5)\n\t\t\t.addPointR(-l5, 1.6 * l5)\n\t\t\t.addSegArc(1.1 * ra5, false, true)\n\t\t\t.addCornerWidened(r5)\n\t\t\t.addPointR(-l5, -1.6 * l5)\n\t\t\t.addSegArc(1.2 * ra5, false, true)\n\t\t\t.addCornerWidened(r5);\n\t\trGeome.logstr += ctr5f.check();\n\t\tfigOne.addMain(ctr5f);\n\t\tconst l6 = 200;\n\t\tconst ra6 = 180;\n\t\tconst ctr6 = contour(0, 4000)\n\t\t\t.addSegStrokeR(l6, 0)\n\t\t\t.addCornerWideAcc(r6)\n\t\t\t.addSegStrokeR(0, l6)\n\t\t\t.addCornerWideAcc(r6)\n\t\t\t.closeSegStroke()\n\t\t\t.addCornerWideAcc(r6);\n\t\trGeome.logstr += ctr6.check();\n\t\tfigOne.addMain(ctr6);\n\t\tconst ctr6b = contour(400, 4000)\n\t\t\t.addSegStrokeR(l6, 0)\n\t\t\t.addCornerWideAcc(r6)\n\t\t\t.addPointR(0, l6)\n\t\t\t.addSegArc(ra6, false, true)\n\t\t\t.addCornerWideAcc(r6)\n\t\t\t.addPointR(-l6, 0)\n\t\t\t.addSegArc(ra6, false, false)\n\t\t\t.addCornerWideAcc(r6)\n\t\t\t.closeSegStroke()\n\t\t\t.addCornerWideAcc(r6);\n\t\trGeome.logstr += ctr6b.check();\n\t\tfigOne.addMain(ctr6b);\n\t\tconst ctr6d = contour(3000, 4000)\n\t\t\t.addPointR(0, 1.7 * l6)\n\t\t\t.addSegArc(2.3 * ra6, true, false)\n\t\t\t.addCornerWideAcc(r6)\n\t\t\t.addPointR(l6, -0.7 * l6)\n\t\t\t.addSegArc(ra6, true, false)\n\t\t\t.addCornerWideAcc(r6)\n\t\t\t.addPointR(-l6, -l6)\n\t\t\t.addSegArc(1.1 * ra6, true, false)\n\t\t\t.addCornerWideAcc(r6);\n\t\trGeome.logstr += ctr6d.check();\n\t\tfigOne.addMain(ctr6d);\n\n\t\tconst ctr6e = contour(3800, 4000)\n\t\t\t.addPointR(l6, 0)\n\t\t\t.addSegArc(ra6, false, false)\n\t\t\t.addCornerWideAcc(r6)\n\t\t\t.addPointR(0, l6)\n\t\t\t.addSegArc(ra6, false, false)\n\t\t\t.addCornerWideAcc(r6)\n\t\t\t.addPointR(-l6, 0)\n\t\t\t.addSegArc(ra6, false, false)\n\t\t\t.addCornerWideAcc(r6)\n\t\t\t.addPointR(0, -l6)\n\t\t\t.addSegArc(ra6, false, false)\n\t\t\t.addCornerWideAcc(r6);\n\t\trGeome.logstr += ctr6e.check();\n\t\tfigOne.addMain(ctr6e);\n\t\tconst ctr6f = contour(4500, 4000)\n\t\t\t.addPointR(l6, l6)\n\t\t\t.addSegArc(l6, false, false)\n\t\t\t.addPointR(l6, -l6)\n\t\t\t.addSegArc(l6, false, false)\n\t\t\t.addCornerWideAcc(r6)\n\t\t\t.addPointR(-l6, 1.6 * l6)\n\t\t\t.addSegArc(1.1 * ra6, false, true)\n\t\t\t.addCornerWideAcc(r6)\n\t\t\t.addPointR(-l6, -1.6 * l6)\n\t\t\t.addSegArc(1.2 * ra6, false, true)\n\t\t\t.addCornerWideAcc(r6);\n\t\trGeome.logstr += ctr6f.check();\n\t\tfigOne.addMain(ctr6f);\n\t\trGeome.fig = { one: figOne };\n\t\trGeome.logstr += 'verify_contour_3 draw successfully!\\n';\n\t\trGeome.calcErr = false;\n\t} catch (emsg) {\n\t\trGeome.logstr += emsg as string;\n\t\tconsole.log(emsg as string);\n\t}\n\treturn rGeome;\n}\n\nconst verifyContour3Def: tPageDef = {\n\tpTitle: 'Verify contour 3',\n\tpDescription: 'Debugging contour.ts for rounded corners and widened corners',\n\tpDef: pDef,\n\tpGeom: pGeom\n};\n\nexport { verifyContour3Def };\n","// verify_contour_4.ts\n\nimport type { tParamDef, tParamVal, tGeom, tPageDef } from 'geometrix';\nimport { contour, figure, pNumber, initGeom } from 'geometrix';\n\nconst pDef: tParamDef = {\n\tpartName: 'verify_contour_4',\n\tparams: [\n\t\t//pNumber(name, unit, init, min, max, step)\n\t\tpNumber('n1', 'scalar', 16, 1, 50, 1),\n\t\tpNumber('n2', 'scalar', 6, 3, 50, 1),\n\t\tpNumber('r1', 'mm', 5, 0, 20, 1)\n\t],\n\tparamSvg: {\n\t\tn1: 'verify_contour_1_r1.svg',\n\t\tn2: 'verify_contour_1_r1.svg',\n\t\tr1: 'verify_contour_1_r1.svg'\n\t},\n\tsim: {\n\t\ttMax: 10,\n\t\ttStep: 0.5,\n\t\ttUpdate: 500 // every 0.5 second\n\t}\n};\n\nfunction pGeom(t: number, param: tParamVal): tGeom {\n\tconst rGeome = initGeom(pDef.partName);\n\trGeome.logstr += `${rGeome.partName} simTime: ${t}\\n`;\n\ttry {\n\t\tconst figOne = figure();\n\t\tconst n1 = param.n1;\n\t\tconst n2 = param.n2;\n\t\tconst r1 = param.r1;\n\t\tconst l1 = 50 + t;\n\t\tconst as = (2 * Math.PI) / (n2 * 3);\n\t\tconst ctr2b = contour(l1, 0)\n\t\t\t.addSegStrokeAP(as, 1.5 * l1)\n\t\t\t.addCornerRounded(r1)\n\t\t\t.addPointAP(2 * as, l1)\n\t\t\t.addSegArc(0.45 * l1, false, true)\n\t\t\t.addCornerWidened(r1)\n\t\t\t.addSegStrokeAP(3 * as, 1.2 * l1);\n\t\tconst ctr1 = contour(l1, 0);\n\t\tconst ctr1b = ctr2b.clone().addCornerRounded(r1);\n\t\tfor (let i = 0; i < n1; i++) {\n\t\t\tconst ctr1c = ctr1b.rotate(0, 0, i * 3 * as).scale(0, 0, 1 + i * 0.2, true);\n\t\t\tctr1.addPartial(ctr1c);\n\t\t}\n\t\tctr1.closeSegStroke();\n\t\t//for (let i = 0; i < ctr1.segments.length; i++) {\n\t\t//\tconsole.log(`dbg212: ${i} ${ctr1.segments[i].sType} ${ctr1.segments[i].radius} ${ctr1.segments[i].px} ${ctr1.segments[i].py}`);\n\t\t//}\n\t\trGeome.logstr += ctr1.check();\n\t\tfigOne.addMain(ctr1);\n\t\tconst ctr5 = contour(l1, 0);\n\t\tfor (let i = 0; i < n1; i++) {\n\t\t\tctr5.addPartial(ctr1b.rotate(0, 0, i * 3 * as).scale(0, 0, 1 + i * 0.2, false));\n\t\t}\n\t\tctr5.closeSegStroke();\n\t\trGeome.logstr += ctr5.check();\n\t\tfigOne.addMain(ctr5.translate(-10 * l1, 0));\n\t\tconst ctr2c = ctr2b.generateContour();\n\t\tconst ctr2 = ctr2c.clone();\n\t\tfor (let i = 1; i < n1; i++) {\n\t\t\tctr2.addPartial(ctr2c.rotate(0, 0, i * 3 * as).scale(0, 0, 1 + i * 0.2));\n\t\t}\n\t\tctr2.closeSegStroke();\n\t\tconst ctr3 = ctr2.translate(10 * l1, 0);\n\t\trGeome.logstr += ctr3.check();\n\t\tfigOne.addMain(ctr3);\n\t\tconst ctr4 = ctr2.translatePolar(Math.PI / 3, 10 * l1);\n\t\trGeome.logstr += ctr4.check();\n\t\tfigOne.addMain(ctr4);\n\t\trGeome.fig = { one: figOne };\n\t\trGeome.logstr += 'verify_contour_4 draw successfully!\\n';\n\t\trGeome.calcErr = false;\n\t} catch (emsg) {\n\t\trGeome.logstr += emsg as string;\n\t\tconsole.log(emsg as string);\n\t}\n\treturn rGeome;\n}\n\nconst verifyContour4Def: tPageDef = {\n\tpTitle: 'Verify contour 4',\n\tpDescription: 'Debugging contour.ts for addPartial',\n\tpDef: pDef,\n\tpGeom: pGeom\n};\n\nexport { verifyContour4Def };\n","// verify_exports_1.ts\n\nimport type { tParamDef, tParamVal, tGeom, tPageDef } from 'geometrix';\nimport {\n\tcontour,\n\tcontourCircle,\n\tfigure,\n\tpNumber,\n\tpCheckbox,\n\tinitGeom,\n\tEExtrude,\n\tEBVolume\n} from 'geometrix';\n\nconst pDef: tParamDef = {\n\tpartName: 'verify_exports_1',\n\tparams: [\n\t\t//pNumber(name, unit, init, min, max, step)\n\t\tpCheckbox('circle', true),\n\t\tpNumber('circle-size', 'mm', 100, 1, 1000, 1),\n\t\tpCheckbox('contour', true),\n\t\tpNumber('contour-size', 'mm', 30, 1, 1000, 1),\n\t\tpCheckbox('contour-arc-large', false)\n\t],\n\tparamSvg: {\n\t\tcircle: 'default_param_blank.svg',\n\t\t'circle-size': 'default_param_blank.svg',\n\t\tcontour: 'default_param_blank.svg',\n\t\t'contour-size': 'default_param_blank.svg',\n\t\t'contour-arc-large': 'default_param_blank.svg'\n\t},\n\tsim: {\n\t\ttMax: 10,\n\t\ttStep: 0.1,\n\t\ttUpdate: 500\n\t}\n};\n\nfunction pGeom(t: number, param: tParamVal): tGeom {\n\tconst rGeome = initGeom(pDef.partName);\n\trGeome.logstr += `${rGeome.partName} simTime: ${t}\\n`;\n\ttry {\n\t\tconst figOne = figure();\n\t\tif (param.circle === 1) {\n\t\t\tconst theCircle = contourCircle(0, 0, param['circle-size']);\n\t\t\tfigOne.addMain(theCircle);\n\t\t}\n\t\tif (param.contour === 1) {\n\t\t\tconst csize = param['contour-size'];\n\t\t\tconst carcl = param['contour-arc-large'] === 1 ? true : false;\n\t\t\tconst ctr1 = contour(0, 0)\n\t\t\t\t.addSegStrokeA(csize, 0)\n\t\t\t\t.addPointA(csize, csize)\n\t\t\t\t.addSegArc(csize * 0.8, carcl, true)\n\t\t\t\t.closeSegStroke();\n\t\t\tfigOne.addMain(ctr1);\n\t\t}\n\t\trGeome.fig = { one: figOne };\n\t\tconst designName = rGeome.partName;\n\t\trGeome.vol = {\n\t\t\textrudes: [\n\t\t\t\t{\n\t\t\t\t\toutName: `subpax_${designName}_one`,\n\t\t\t\t\tface: `${designName}_one`,\n\t\t\t\t\textrudeMethod: EExtrude.eLinearOrtho,\n\t\t\t\t\tlength: 10,\n\t\t\t\t\trotate: [0, 0, 0],\n\t\t\t\t\ttranslate: [0, 0, 0]\n\t\t\t\t}\n\t\t\t],\n\t\t\tvolumes: [\n\t\t\t\t{\n\t\t\t\t\toutName: `pax_${designName}`,\n\t\t\t\t\tboolMethod: EBVolume.eIdentity,\n\t\t\t\t\tinList: [`subpax_${designName}_one`]\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t\trGeome.logstr += 'verify_exports_1 draw successfully!\\n';\n\t\trGeome.calcErr = false;\n\t} catch (emsg) {\n\t\trGeome.logstr += emsg as string;\n\t\tconsole.log(emsg as string);\n\t}\n\treturn rGeome;\n}\n\nconst verifyExports1Def: tPageDef = {\n\tpTitle: 'Verify exports 1',\n\tpDescription: 'For dev & debug of Openscad export',\n\tpDef: pDef,\n\tpGeom: pGeom\n};\n\nexport { verifyExports1Def };\n"],"mappings":";AAIA;AAAA,EACC,WAAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;;;ACZP;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;;;ACZP,IAAM,WAAN,MAAe;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY,IAAY,IAAY,IAAY,IAAY,KAAc;AACzE,SAAK,gBAAgB;AACrB,SAAK,gBAAgB;AACrB,SAAK,cAAc;AACnB,SAAK,gBAAgB;AACrB,SAAK,cAAc;AAAA,EACpB;AAAA;AAAA,EAEA,YAAoB;AACnB,UAAM,OAAO,KAAK,cAAc,IAAI;AACpC,WAAO;AAAA,EACR;AAAA,EACA,OAAO,IAAoB;AAC1B,UAAM,KAAK,KAAK,cAAc,KAAK,KAAK,IAAI,MAAM,CAAC;AACnD,WAAO;AAAA,EACR;AAAA,EACA,OAAO,IAAoB;AAC1B,QAAI,KAAK,GAAG;AACX,YAAM,iCAAiC,EAAE;AAAA,IAC1C;AACA,QAAI,KAAK,IAAI,EAAE,IAAI,KAAK,KAAK,GAAG;AAC/B,YAAM,iCAAiC,EAAE;AAAA,IAC1C;AACA,UAAM,OAAO,KAAK,UAAU;AAC5B,UAAM,KAAK,QAAQ,KAAK,KAAK,KAAK,EAAE;AACpC,WAAO;AAAA,EACR;AAAA,EACA,QAAQ,IAAoB;AAC3B,UAAM,MAAM,KAAK,gBAAgB,KAAK,OAAO,EAAE;AAC/C,WAAO;AAAA,EACR;AAAA;AAAA,EAEA,IAAI,IAAsB;AACzB,UAAM,MAAM,KAAK,OAAO,EAAE;AAC1B,UAAM,MAAM,KAAK,QAAQ,EAAE;AAC3B,UAAM,OAAO,KAAK,gBAAgB,KAAK,IAAI,GAAG,IAAI;AAClD,UAAM,OAAO,KAAK,gBAAgB,KAAK,IAAI,GAAG,IAAI;AAClD,WAAO,CAAC,MAAM,IAAI;AAAA,EACnB;AAAA;AAAA,EAEA,MAAM,IAAoB;AACzB,UAAM,MAAM,KAAK,gBAAgB,KAAK,UAAU,IAAI;AACpD,WAAO;AAAA,EACR;AAAA;AAAA,EAEA,OAAO,IAAoB;AAC1B,UAAM,KAAK,KAAK,KAAK,MAAM,IAAI,KAAK,eAAe,IAAI,CAAC;AACxD,WAAO;AAAA,EACR;AAAA;AAAA,EAEA,WAAW,IAAoB;AAC9B,UAAM,YAAY,MAAM;AACxB,QAAI,MAAM,KAAK,KAAK;AACpB,QAAI,OAAO,MAAM;AACjB,QAAI,MAAM,KAAK,OAAO,GAAG;AACzB,QAAI,QAAQ;AACZ,WAAO,KAAK,IAAI,MAAM,EAAE,IAAI,WAAW;AACtC,UAAI,MAAM,IAAI;AACb,eAAO;AAAA,MACR,OAAO;AACN,eAAO;AAAA,MACR;AACA,YAAM,KAAK,OAAO,GAAG;AACrB,aAAO,OAAO;AACd,eAAS;AAAA,IACV;AACA,YAAQ,IAAI,4BAA4B,KAAK,EAAE;AAC/C,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,KAAa,IAAY,IAAY,IAAsB;AAChE,QAAI,KAAK,KAAK,EAAE,IAAI,KAAK,UAAU,IAAI,GAAG;AACzC,YAAM,0CAA0C,EAAE,oCAAoC,KAAK,WAAW;AAAA,IACvG;AACA,UAAM,MAAM,MAAM;AAClB,UAAM,MAAM,KAAK,gBAAgB,KAAK,IAAI,GAAG,IAAI,KAAK;AACtD,UAAM,MAAM,KAAK,gBAAgB,KAAK,IAAI,GAAG,IAAI,KAAK;AACtD,UAAM,MAAM,MAAO,KAAK,UAAU,IAAI,KAAK,KAAM;AACjD,UAAM,MAAM,KAAK,KAAK;AACtB,UAAM,MAAM,MAAM,KAAK,IAAI,GAAG,IAAI;AAClC,UAAM,MAAM,MAAM,KAAK,IAAI,GAAG,IAAI;AAClC,UAAM,KAAK,KAAK,OAAO,EAAE;AACzB,UAAM,QAAQ,KAAK;AACnB,UAAM,SAAS;AACf,UAAM,MAAM,KAAK,IAAI,MAAM,IAAI;AAC/B,UAAM,MAAM,KAAK,IAAI,MAAM,IAAI;AAC/B,WAAO,CAAC,KAAK,KAAK,KAAK,GAAG;AAAA,EAC3B;AACD;AAEA,SAAS,SAAS,IAAY,IAAY,IAAY,IAAY,KAAwB;AACzF,QAAM,YAAY,IAAI,SAAS,IAAI,IAAI,IAAI,IAAI,GAAG;AAClD,SAAO;AACR;;;AD1FA,IAAM,mBAAN,MAAuB;AAAA,EACtB,MAAM;AAAA,EACN,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,MAAM;AAAA,EACN,MAAM;AAAA,EACN,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,SAAS;AAAA,EACT,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,YAAY,SAAS,GAAG,GAAG,IAAI,GAAG,IAAI;AAAA,EACtC,YAAY,SAAS,GAAG,GAAG,IAAI,GAAG,KAAK;AAAA,EACvC,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN;AAAA,EACA,WAAW;AAAA,EACX,cAAc;AACb,SAAK,MAAM;AACX,SAAK,MAAM;AACX,SAAK,WAAW;AAAA,EACjB;AAAA,EACA,YAAY,QAAgB;AAC3B,QAAI,KAAK,WAAW,MAAM,QAAQ;AACjC,YAAM,gCAAgC,KAAK,QAAQ,eAAe,MAAM;AAAA,IACzE;AACA,SAAK,WAAW;AAAA,EACjB;AAAA,EACA,cAAc,WAAmB,KAAa;AAC7C,QAAI,KAAK,WAAW,WAAW;AAC9B,YAAM,6BAA6B,GAAG,aAAa,KAAK,QAAQ,sCAAsC,SAAS;AAAA,IAChH;AAAA,EACD;AAAA,EACA,sBAAsB,MAAc,KAAa;AAChD,SAAK,YAAY,CAAC;AAClB,SAAK,MAAM;AACX,SAAK,KAAK;AACV,SAAK,KAAM,KAAK,MAAM,KAAK,KAAM;AACjC,SAAK,KAAM,IAAI,KAAK,KAAM,KAAK;AAAA,EAChC;AAAA,EACA,mBAAmB,KAAa,KAAa;AAC5C,SAAK,YAAY,CAAC;AAClB,SAAK,KAAK;AACV,SAAK,KAAK;AAAA,EACX;AAAA,EACA,iBAAiB,KAAa,KAAa,KAAa,SAAiB;AACxE,SAAK,YAAY,CAAC;AAClB,SAAK,KAAK,KAAK,KAAK,KAAK,MAAM;AAC/B,SAAK,KAAK,KAAK,KAAK,KAAK,MAAM;AAC/B,SAAK,KAAK,KAAK,KAAK,KAAK,MAAM;AAC/B,SAAK,SAAS;AAAA,EACf;AAAA,EACA,gBAAgB,WAAmB,UAAkB;AACpD,SAAK,YAAY,CAAC;AAClB,SAAK,MAAM;AACX,SAAK,MAAM;AAAA,EACZ;AAAA,EACA,sBAAsB,KAAa;AAClC,SAAK,YAAY,CAAC;AAClB,SAAK,MAAM,MAAM;AAAA,EAClB;AAAA,EACA,WAAW,SAAiB,SAAiB;AAC5C,SAAK,YAAY,CAAC;AAClB,SAAK,YAAY;AACjB,SAAK,YAAY;AAAA,EAClB;AAAA,EACA,oBAAoB,gBAAwB,gBAAwB;AACnE,SAAK,YAAY,CAAC;AAClB,SAAK,gBAAgB;AACrB,SAAK,gBAAgB;AAAA,EACtB;AAAA,EACA,gBAA4B;AAC3B,SAAK,cAAc,GAAG,eAAe;AACrC,UAAM,cAAc;AAAA,MACnB,cAAc,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,OAAO;AAAA,MAChD,cAAc,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,OAAO;AAAA,MAChD,cAAc,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,OAAO;AAAA,MAChD,cAAc,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,OAAO;AAAA,MAChD,cAAc,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,gBAAgB;AAAA,MAC1D,cAAc,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,SAAS;AAAA,IACpD;AACA,WAAO;AAAA,EACR;AAAA,EACA,qBAAqB;AACpB,SAAK,cAAc,GAAG,oBAAoB;AAC1C,SAAK,YAAY,SAAS,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,GAAG,IAAI;AAC7D,QAAI,KAAK,KAAK,KAAK,KAAK;AACvB,WAAK,MAAM,KAAK,UAAU,OAAO,KAAK,EAAE;AAAA,IACzC,OAAO;AACN,WAAK,MAAM;AAAA,IACZ;AACA,SAAK,MAAM,KAAK,UAAU,OAAO,KAAK,EAAE;AACxC,SAAK,MAAM,KAAK,UAAU,OAAO,KAAK,EAAE;AACxC,SAAK,MAAM,KAAK,UAAU,OAAO,KAAK,GAAG;AACzC,SAAK,MAAM,KAAK,UAAU,OAAO,KAAK,GAAG;AACzC,SAAK,MAAM,KAAK,UAAU,OAAO,KAAK,GAAG;AACzC,SAAK,YAAY,SAAS,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,GAAG,KAAK;AAC9D,QAAI,KAAK,KAAK,KAAK,KAAK;AACvB,WAAK,MAAM,KAAK,UAAU,OAAO,KAAK,EAAE;AAAA,IACzC,OAAO;AACN,WAAK,MAAM;AAAA,IACZ;AACA,SAAK,MAAM,KAAK,UAAU,OAAO,KAAK,EAAE;AACxC,SAAK,MAAM,KAAK,UAAU,OAAO,KAAK,EAAE;AACxC,SAAK,MAAM,KAAK,UAAU,OAAO,KAAK,GAAG;AACzC,SAAK,MAAM,KAAK,UAAU,OAAO,KAAK,GAAG;AACzC,SAAK,MAAM,KAAK,UAAU,OAAO,KAAK,GAAG;AAAA,EAC1C;AAAA,EACA,yBAAyB;AACxB,UAAM,MAAM,KAAK,KAAK,KAAK;AAC3B,UAAM,OAAO,KAAK,MAAM,KAAK;AAC7B,UAAM,OAAO,KAAK,IAAI,KAAK,MAAM,KAAK,GAAG;AAIzC,UAAM,YAAY,MAAM,OAAO;AAC/B,QAAI,YAAY,GAAG;AAClB,YAAM,yCAAyC,KAAK,SAAS,CAAC;AAAA;AAAA,IAC/D;AACA,UAAM,MAAM,KAAK,MAAM,IAAI,KAAK;AAChC,UAAM,OAAO,KAAK,MAAM,KAAK;AAC7B,UAAM,OAAO,KAAK,IAAI,KAAK,MAAM,KAAK,GAAG;AACzC,UAAM,YAAY,MAAM,OAAO;AAC/B,QAAI,YAAY,IAAI,KAAK,MAAM,KAAK,QAAQ,KAAK,EAAE,GAAG;AACrD,YAAM,yCAAyC;AAAA,QAC9C;AAAA,MACD,CAAC,sBAAsB,KAAK,KAAK,MAAM,CAAC;AAAA;AAAA,IACzC;AAAA,EACD;AAAA,EACA,cAAwB;AACvB,UAAM,OAAO,IAAI,KAAK;AACtB,UAAM,UAAU;AAChB,SAAK,cAAc,GAAG,YAAY;AAClC,SAAK,mBAAmB;AACxB,UAAM,YAAY,KAAK,MAAM,KAAK,OAAO;AACzC,UAAM,YAAY,KAAK,MAAM,KAAK,OAAO;AACzC,UAAM,OAAO,KAAK,YAAY,UAAU,KAAK;AAC7C,UAAM,QAAQ,SAAS,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,OAAO,KAAK,KAAK,IAAI;AACxE,UAAM,CAAC,KAAK,GAAG,IAAI,MAAM,IAAI,KAAK,MAAM,IAAI,QAAQ;AACpD,UAAM,OAAO,QAAQ,KAAK,KAAK,MAAM;AACrC,aAAS,IAAI,GAAG,IAAI,MAAM,KAAK;AAC9B,YAAM,CAAC,IAAI,EAAE,IAAI,MAAM,IAAI,KAAK,OAAO,IAAI,KAAK,QAAQ;AACxD,WAAK,cAAc,IAAI,EAAE;AAAA,IAC1B;AACA,UAAM,QAAQ,OAAO,KAAK,KAAK,KAAK;AACpC,UAAM,QAAQ,SAAS,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,QAAQ,KAAK,KAAK,KAAK;AAC1E,aAAS,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK;AAClC,YAAM,CAAC,IAAI,EAAE,IAAI,MAAM,IAAI,KAAK,OAAO,OAAO,KAAK,QAAQ;AAC3D,WAAK,cAAc,IAAI,EAAE;AAAA,IAC1B;AACA,SAAK,eAAe;AACpB,WAAO;AAAA,EACR;AAAA,EACA,aAAuB;AACtB,SAAK,cAAc,GAAG,YAAY;AAClC,SAAK,mBAAmB;AACxB,SAAK,uBAAuB;AAC5B,UAAM,UAAU,KAAK,MAAM,KAAK;AAEhC,UAAM,UAAU,KAAK,MAAM,KAAK;AAEhC,UAAM,OAAO,KAAK,KAAK,KAAK,MAAM,KAAK,KAAK,KAAK;AACjD,UAAM,OAAO,KAAK,KAAK,KAAK,MAAM,KAAK,KAAK,KAAK;AACjD,QAAI,KAAK,SAAS,OAAO,KAAK,IAAI;AACjC,YAAM,6BAA6B,KAAK,KAAK,MAAM,CAAC,uBAAuB;AAAA,QAC1E;AAAA,MACD,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;AAAA,IAC1B;AACA,QAAI,KAAK,SAAS,OAAO,KAAK,IAAI;AACjC,YAAM,6BAA6B,KAAK,KAAK,MAAM,CAAC,uBAAuB;AAAA,QAC1E;AAAA,MACD,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;AAAA,IAC1B;AACA,UAAM,YAAY,KAAK,MAAM,KAAK,OAAO,KAAK;AAC9C,UAAM,YAAY,KAAK,MAAM,KAAK,OAAO,KAAK;AAC9C,UAAM,SAAS,MAAM,KAAK,IAAI,KAAK,EAAE;AAGrC,UAAM,QAAQ,OAAO,eAAe,KAAK,YAAY,SAAS,KAAK,EAAE;AACrE,UAAM,WAAW,QAAQ,MAAM,IAAI,MAAM,EAAE;AAC3C,aAAS,IAAI,GAAG,IAAI,KAAK,IAAI,KAAK;AACjC,YAAM,OAAO,KAAK,YAAY,IAAI,KAAK;AACvC,YAAM,OAAO,OAAO,eAAe,OAAO,SAAS,KAAK,EAAE;AAC1D,eAAS,cAAc,KAAK,IAAI,KAAK,EAAE,EAAE,iBAAiB,KAAK,MAAM;AACrE,YAAM,QAAQ,SAAS,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,OAAO,KAAK,KAAK,IAAI;AAExE,YAAM,CAAC,KAAK,GAAG,IAAI,MAAM,IAAI,KAAK,GAAG;AACrC,YAAM,OAAO,MAAM,MAAM,KAAK,GAAG;AACjC,YAAM,OAAO,MAAM,KAAK,GAAG,EAAE,eAAe,OAAO,KAAK,KAAK,GAAG,KAAK,aAAa;AAClF,eAAS,cAAc,KAAK,IAAI,KAAK,EAAE;AAKvC,eAAS,IAAI,GAAG,IAAI,KAAK,eAAe,KAAK;AAC5C,cAAM,MAAM,KAAK,MAAM,IAAI;AAC3B,cAAM,CAAC,IAAI,EAAE,IAAI,MAAM,IAAI,MAAM,QAAQ;AACzC,cAAM,MAAM,MAAM,MAAM,GAAG;AAC3B,cAAM,MAAM,MAAM,MAAM,MAAM,QAAQ,IAAI,KAAK;AAC/C,cAAM,KAAK,MAAM,IAAI,EAAE,EAAE,eAAe,MAAM,KAAK,KAAK,GAAG,KAAK,aAAa;AAE7E,iBAAS,UAAU,GAAG,IAAI,GAAG,EAAE,EAAE,YAAY,KAAK,GAAG;AAAA,MACtD;AACA,YAAM,QAAQ,OAAO,KAAK,KAAK,KAAK;AACpC,YAAM,QAAQ,SAAS,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,QAAQ,KAAK,KAAK,KAAK;AAE1E,YAAM,MAAM,KAAK,MAAM,KAAK,gBAAgB;AAC5C,YAAM,CAAC,KAAK,GAAG,IAAI,MAAM,IAAI,GAAG;AAChC,YAAM,OAAO,MAAM,MAAM,GAAG,IAAI,KAAK;AACrC,YAAM,OAAO,MAAM,KAAK,GAAG,EAAE,eAAe,OAAO,KAAK,KAAK,GAAG,KAAK,aAAa;AAClF,eAAS,cAAc,KAAK,IAAI,KAAK,EAAE;AAKvC,eAAS,IAAI,GAAG,IAAI,KAAK,eAAe,KAAK;AAC5C,cAAM,MAAM,KAAK,OAAO,KAAK,gBAAgB,KAAK;AAClD,cAAM,CAAC,IAAI,EAAE,IAAI,MAAM,IAAI,MAAM,QAAQ;AACzC,cAAM,MAAM,MAAM,MAAM,GAAG,IAAI,KAAK;AACpC,cAAM,MAAM,MAAM,MAAM,MAAM,QAAQ;AACtC,cAAM,KAAK,MAAM,IAAI,EAAE,EAAE,eAAe,MAAM,KAAK,KAAK,GAAG,KAAK,aAAa;AAE7E,iBAAS,UAAU,GAAG,IAAI,GAAG,EAAE,EAAE,YAAY,KAAK,GAAG;AAAA,MACtD;AACA,YAAM,OAAO,OAAO,eAAe,QAAQ,SAAS,KAAK,EAAE;AAC3D,eAAS,cAAc,KAAK,IAAI,KAAK,EAAE,EAAE,iBAAiB,KAAK,MAAM;AAAA,IACtE;AACA,aAAS,eAAe;AACxB,WAAO;AAAA,EACR;AAAA,EACA,SAAiB;AAChB,WAAO,KAAK;AAAA,EACb;AACD;AAEA,SAAS,YAA8B;AACtC,QAAM,OAAO,IAAI,iBAAiB;AAClC,SAAO;AACR;AAWA,SAAS,UACR,KACA,KACA,mBACA,cACW;AACX,MAAI,cAAc,GAAG,oBAAoB;AACzC,MAAI,cAAc,GAAG,oBAAoB;AACzC,QAAM,YAAY,IAAI,KAAK,IAAI,KAAK;AACpC,QAAM,MAAM,IAAI,KAAK,YAAY,KAAK,IAAI,iBAAiB;AAC3D,QAAM,MAAM,IAAI,KAAK,YAAY,KAAK,IAAI,iBAAiB;AAC3D,SAAO,CAAC,KAAK,KAAK,SAAS;AAC5B;AACA,SAAS,YACR,KACA,KACA,OACA,OACA,OACA,OACA,UACA,WACA,WACW;AACX,MAAI,cAAc,GAAG,sBAAsB;AAC3C,MAAI,cAAc,GAAG,sBAAsB;AAC3C,MAAI,OAAO;AACX,MAAI,OAAO;AACX,MAAI,OAAO;AACX,MAAI,OAAO;AACX,QAAM,aAAwB;AAC9B,QAAM,aAAwB;AAC9B,MAAI,eAAe,iBAAmB;AACrC,QAAI,IAAI,KAAK,IAAI,IAAI;AACpB,aAAO,IAAI;AACX,aAAQ,OAAO,IAAI,KAAM,IAAI;AAAA,IAC9B,OAAO;AACN,aAAO,IAAI;AACX,aAAQ,OAAO,IAAI,KAAM,IAAI;AAAA,IAC9B;AAAA,EACD;AACA,MAAI,eAAe,iBAAmB;AACrC,QAAI,IAAI,KAAK,IAAI,IAAI;AACpB,aAAO,IAAI;AACX,aAAQ,OAAO,IAAI,KAAM,IAAI;AAAA,IAC9B,OAAO;AACN,aAAO,IAAI;AACX,aAAQ,OAAO,IAAI,KAAM,IAAI;AAAA,IAC9B;AAAA,EACD;AACA,MAAI,aAAa,GAAG;AACnB,WAAO;AACP,WAAO;AAAA,EACR;AACA,SAAO,CAAC,MAAM,MAAM,MAAM,IAAI;AAC/B;AAEA,IAAM,aAAN,MAAiB;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA,OAAO;AAAA,EACP,OAAO;AAAA,EACP,aAAa;AAAA,EACb,aAAa;AAAA,EACb,aAAa;AAAA,EACb,aAAa;AAAA,EACb,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,YACC,KACA,KACA,YACA,mBACA,WACA,kBACC;AAED,SAAK,MAAM;AACX,SAAK,MAAM;AACX,SAAK,aAAa;AAClB,SAAK,oBAAoB;AACzB,SAAK,YAAY;AACjB,SAAK,mBAAmB;AAExB,SAAK,MAAM;AACX,SAAK,MAAM;AACX,SAAK,MAAM;AAAA,EACZ;AAAA,EACA,SAAS;AACR,SAAK,IAAI,cAAc,GAAG,qBAAqB;AAC/C,SAAK,IAAI,cAAc,GAAG,qBAAqB;AAC/C,QAAI,KAAK,YAAY,KAAK,IAAI,KAAK,KAAK,IAAI,IAAI;AAC/C,WAAK,OAAO,iCAAiC;AAAA,QAC5C,KAAK;AAAA,MACN,CAAC,mCAAmC,KAAK,KAAK,IAAI,EAAE,CAAC,eAAe;AAAA,QACnE,KAAK,IAAI;AAAA,MACV,CAAC;AAAA;AAAA,IACF;AACA,QAAI,UAAU,KAAK,IAAI,MAAM,KAAK,IAAI,KAAK,KAAK,IAAI,MAAM,KAAK,IAAI,EAAE,MAAM,GAAG;AAC7E,WAAK,OAAO,wCAAwC,KAAK,IAAI,EAAE,MAC9D,KAAK,IAAI,EACV,MAAM,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC,oBAAoB,KAAK,KAAK,IAAI,GAAG,CAAC,IAAI;AAAA,QAC9E,KAAK,IAAI;AAAA,MACV,CAAC,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,IAAI,GAAG,CAAC;AAAA;AAAA,IACzC;AACA,QAAI,UAAU,KAAK,IAAI,MAAM,KAAK,IAAI,KAAK,KAAK,IAAI,MAAM,KAAK,IAAI,EAAE,MAAM,GAAG;AAC7E,WAAK,OAAO,uCAAuC,KAAK,IAAI,EAAE,MAC7D,KAAK,IAAI,EACV,MAAM,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC,oBAAoB,KAAK,KAAK,IAAI,GAAG,CAAC,IAAI;AAAA,QAC9E,KAAK,IAAI;AAAA,MACV,CAAC,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,IAAI,GAAG,CAAC;AAAA;AAAA,IACzC;AAAA,EACD;AAAA,EACA,SAAS;AACR,SAAK,IAAI,cAAc,GAAG,qBAAqB;AAC/C,SAAK,IAAI,cAAc,GAAG,qBAAqB;AAC/C,QAAI,UAAU,KAAK,IAAI,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,GAAG;AACnD,WAAK,OAAO,+CAA+C;AAAA,QAC1D,KAAK,IAAI;AAAA,MACV,CAAC,SAAS,KAAK,KAAK,IAAI,GAAG,CAAC;AAAA;AAAA,IAC7B;AACA,UAAM,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI;AAClC,UAAM,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI;AAClC,UAAM,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI;AAClC,UAAM,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI;AAClC,QAAI,UAAU,KAAK,EAAE,IAAI,GAAG;AAC3B,WAAK,OAAO,uBAAuB,KAAK,EAAE,CAAC,2BAA2B,KAAK,EAAE,CAAC;AAAA;AAAA,IAC/E;AACA,QAAI,UAAU,KAAK,EAAE,IAAI,GAAG;AAC3B,WAAK,OAAO,uBAAuB,KAAK,EAAE,CAAC,2BAA2B,KAAK,EAAE,CAAC;AAAA;AAAA,IAC/E;AAAA,EACD;AAAA,EACA,iBAAiB;AAChB,SAAK,IAAI,cAAc,GAAG,6BAA6B;AACvD,SAAK,IAAI,cAAc,GAAG,6BAA6B;AACvD,SAAK,IAAI,mBAAmB;AAC5B,SAAK,IAAI,mBAAmB;AAC5B,UAAM,QAAS,KAAK,YAAY,KAAK,IAAI,OAAQ,KAAK,IAAI,MAAM,KAAK,IAAI;AACzE,UAAM,QAAS,KAAK,YAAY,KAAK,IAAI,OAAQ,KAAK,IAAI,MAAM,KAAK,IAAI;AACzE,UAAM,QAAQ,KAAK,YAAY;AAC/B,UAAM,QAAQ,KAAK,YAAY;AAG/B,SAAK,MAAM,KAAK,MAAM,KAAK,IAAI,MAAM,KAAK,IAAI,OAAO,KAAK,SAAS;AACnE,SAAK,MAAM,KAAK,MAAM,KAAK,IAAI,MAAM,KAAK,IAAI,OAAO,KAAK,SAAS;AACnE,SAAK,OAAO,4BAA4B,KAAK,SAAS,KAAK,GAAG,CAAC,CAAC,UAAU;AAAA,MACzE,SAAS,KAAK,GAAG;AAAA,IAClB,CAAC;AAAA;AACD,SAAK,OAAO,KAAK,YAAY,KAAK,IAAI,KAAK,GAAG;AAC9C,SAAK,OAAO,KAAK,YAAY,KAAK,IAAI,KAAK,GAAG;AAC9C,SAAK,OAAO,yCAAyC,KAAK,KAAK,IAAI,CAAC,UAAU;AAAA,MAC7E,KAAK;AAAA,IACN,CAAC;AAAA;AAED,UAAM,SAAS,KAAK,KAAK,IAAI,KAAK;AAClC,UAAM,SAAS,aAAa,KAAK,IAAI,IAAI,OAAO,MAAM;AACtD,SAAK,SAAS,KAAK,KAAK,SAAS;AAEjC,UAAM,YAAY,KAAK,IAAI,MAAM,KAAK,MAAM,KAAK,IAAI;AAErD,QAAI,UAAU,KAAK,SAAS,SAAS,MAAM,GAAG;AAC7C,YAAM,kBAAkB,KAAK,MAAM,kBAAkB,SAAS;AAAA,IAC/D;AACA,UAAM,QAAQ,aAAa,OAAO,KAAK,IAAI,IAAI,KAAK,MAAM;AAC1D,UAAM,SAAS;AACf,UAAM,SAAS,aAAa,KAAK,IAAI,IAAI,OAAO,MAAM;AACtD,SAAK,SAAS,KAAK,KAAK,SAAS;AACjC,UAAM,YAAY,KAAK,IAAI,MAAM,KAAK,MAAM,KAAK,IAAI;AAErD,QAAI,UAAU,KAAK,SAAS,SAAS,MAAM,GAAG;AAC7C,YAAM,kBAAkB,KAAK,MAAM,kBAAkB,SAAS;AAAA,IAC/D;AACA,UAAM,QAAQ,aAAa,OAAO,KAAK,IAAI,IAAI,KAAK,MAAM;AAC1D,UAAM,OAAO,QAAQ;AACrB,UAAM,QAAQ,OAAO,KAAK,IAAI;AAC9B,UAAM,QAAQ,OAAO,KAAK,IAAI;AAC9B,UAAM,aAAa,KAAK,IAAI,MAAM;AAClC,UAAM,aAAa,KAAK,IAAI,MAAM;AAClC,SAAK,aAAa,KAAK,IAAI,UAAU,OAAO,UAAU;AACtD,SAAK,aAAa,KAAK,IAAI,UAAU,OAAO,UAAU;AAEtD,UAAM,SAAS,KAAK,KAAK,IAAI,KAAK;AAClC,UAAM,SAAS,aAAa,KAAK,IAAI,IAAI,OAAO,MAAM;AACtD,SAAK,SAAS,KAAK,KAAK,SAAS;AACjC,UAAM,YAAY,KAAK,IAAI,MAAM,KAAK,MAAM,KAAK,IAAI;AAErD,QAAI,UAAU,KAAK,SAAS,SAAS,MAAM,GAAG;AAC7C,YAAM,kBAAkB,KAAK,MAAM,kBAAkB,SAAS;AAAA,IAC/D;AACA,UAAM,QAAQ,aAAa,OAAO,KAAK,IAAI,IAAI,KAAK,MAAM;AAC1D,UAAM,SAAS;AACf,UAAM,SAAS,aAAa,KAAK,IAAI,IAAI,OAAO,MAAM;AACtD,SAAK,SAAS,KAAK,KAAK,SAAS;AACjC,UAAM,YAAY,KAAK,IAAI,MAAM,KAAK,MAAM,KAAK,IAAI;AAErD,QAAI,UAAU,KAAK,SAAS,SAAS,MAAM,GAAG;AAC7C,YAAM,kBAAkB,KAAK,MAAM,kBAAkB,SAAS;AAAA,IAC/D;AACA,UAAM,QAAQ,aAAa,OAAO,KAAK,IAAI,IAAI,KAAK,MAAM;AAC1D,UAAM,OAAO,QAAQ;AACrB,UAAM,QAAQ,OAAO,KAAK,IAAI;AAC9B,UAAM,QAAQ,OAAO,KAAK,IAAI;AAC9B,UAAM,aAAa,KAAK,IAAI,MAAM;AAClC,UAAM,aAAa,KAAK,IAAI,MAAM;AAClC,SAAK,aAAa,KAAK,IAAI,UAAU,OAAO,UAAU;AACtD,SAAK,aAAa,KAAK,IAAI,UAAU,OAAO,UAAU;AACtD,SAAK,OAAO,2CAA2C,KAAK,IAAI,CAAC,UAAU;AAAA,MAC1E;AAAA,IACD,CAAC;AAAA;AACD,SAAK,OAAO,qDAAqD;AAAA,MAChE,SAAS,KAAK;AAAA,IACf,CAAC,aAAa,KAAK,SAAS,KAAK,CAAC,CAAC,YAAY,KAAK,SAAS,KAAK,CAAC,CAAC,YAAY;AAAA,MAC/E,SAAS,KAAK;AAAA,IACf,CAAC;AAAA;AACD,SAAK,OAAO,6CAA6C;AAAA,MACxD,KAAK,IAAI,KAAK,KAAK;AAAA,IACpB,CAAC,aAAa,KAAK,KAAK,IAAI,KAAK,KAAK,UAAU,CAAC,YAAY;AAAA,MAC5D,KAAK,IAAI,KAAK,KAAK;AAAA,IACpB,CAAC,YAAY,KAAK,KAAK,IAAI,KAAK,KAAK,UAAU,CAAC;AAAA;AAChD,SAAK,QAAU,IAAI,KAAK,KAAM,KAAK,IAAI,KAAM,KAAK,IAAI;AACtD,SAAK,QAAU,IAAI,KAAK,KAAM,KAAK,IAAI,KAAM,KAAK,IAAI;AACtD,SAAK,OAAO,yCAAyC,KAAK,KAAK,KAAK,CAAC,OAAO;AAAA,MAC3E,KAAK;AAAA,IACN,CAAC;AAAA;AACD,SAAK,OAAO,iDAAiD;AAAA,MAC5D,OAAO,KAAK;AAAA,IACb,CAAC,OAAO,KAAK,OAAO,KAAK,KAAK,CAAC;AAAA;AAC/B,SAAK,QAAU,IAAI,KAAK,KAAM,KAAK,IAAI,KAAM,KAAK,IAAI;AACtD,SAAK,QAAU,IAAI,KAAK,KAAM,KAAK,IAAI,KAAM,KAAK,IAAI;AACtD,SAAK,OAAO,wCAAwC,KAAK,KAAK,KAAK,CAAC,OAAO;AAAA,MAC1E,KAAK;AAAA,IACN,CAAC;AAAA;AACD,SAAK,OAAO,gDAAgD;AAAA,MAC3D,OAAO,KAAK;AAAA,IACb,CAAC,OAAO,KAAK,OAAO,KAAK,KAAK,CAAC;AAAA;AAAA,EAChC;AAAA,EACA,oBAAoB;AACnB,SAAK,IAAI,cAAc,GAAG,8BAA8B;AACxD,SAAK,gBAAgB;AAAA,MACpB,KAAK,OAAO,KAAK,aAAa,KAAK,qBAAqB,KAAK,IAAI;AAAA,IAClE;AAGA,WAAO,UAAU,KAAK,gBAAgB,KAAK,IAAI,EAAE,KAAK,GAAG;AACxD,WAAK,gBAAgB,UAAU,KAAK,gBAAgB,KAAK,IAAI,EAAE;AAAA,IAChE;AAEA,SAAK,gBAAgB;AAAA,MACpB,KAAK,OACH,KAAK,aAAa,KAAK,qBACxB,KAAK,IAAI,KAAK,KAAK,IAAI,MACvB,KAAK,IAAI;AAAA,IACX;AACA,WAAO,UAAU,KAAK,gBAAgB,KAAK,IAAI,EAAE,KAAK,GAAG;AACxD,WAAK,gBAAgB,UAAU,KAAK,gBAAgB,KAAK,IAAI,EAAE;AAAA,IAChE;AACA,SAAK,QAAQ,KAAK,IAAI,MAAM,KAAK;AACjC,SAAK,QAAQ,KAAK,IAAI,MAAM,KAAK;AAAA,EAElC;AAAA,EACA,UAAU;AACT,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,SAAK,eAAe;AACpB,SAAK,kBAAkB;AAAA,EACxB;AAAA,EACA,gBACC,KACA,KACA,KACA,KACA,OACA,MACA,KACA,IACA,OACA,OACW;AACX,UAAM,QAAQ;AACd,UAAM,YAAY,KAAK,MAAM,OAAO,IAAI,IAAI;AAC5C,UAAM,OAAO,MAAM,YAAY,OAAO;AACtC,UAAM,OAAO,MAAM,IAAI;AACvB,UAAM,CAAC,IAAI,IAAI,IAAI,EAAE,IAAI,KAAK,MAAM,KAAK,OAAO,IAAI,KAAK,KAAK;AAC9D,SAAK,OAAO,SAAS,KAAK,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC;AAAA;AAC1D,UAAM,MAAM,MAAM,IAAI,EAAE;AACxB,UAAM,KAAK,MAAM,OAAO;AACxB,UAAM,OAAO,QAAQ,IAAI,IAAI,KAAK;AAClC,UAAM,MAAM,IAAI,eAAe,IAAI,CAAC,EAAE;AACtC,SAAK,cAAc,IAAI,IAAI,IAAI,EAAE;AACjC,UAAM,MAAM,IAAI,eAAe,KAAM,OAAO,KAAK,KAAM,GAAG,EAAE;AAC5D,SAAK,cAAc,IAAI,IAAI,IAAI,EAAE;AACjC,SAAK,eAAe;AACpB,WAAO;AAAA,EACR;AAAA,EACA,kBAA8B;AAC7B,UAAM,QAAQ,KAAK;AAAA,MAClB;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK,IAAI;AAAA,MACT,KAAK,IAAI;AAAA,MACT,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,IACD;AACA,UAAM,QAAQ,KAAK;AAAA,MAClB;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK,IAAI;AAAA,MACT,KAAK,IAAI;AAAA,MACT,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,IACD;AACA,UAAM,QAAoB,CAAC;AAC3B,UAAM,KAAK,KAAK;AAChB,UAAM,KAAK,KAAK;AAChB,WAAO;AAAA,EACR;AAAA,EACA,cAA0B;AACzB,UAAM,QAAoB,CAAC;AAC3B,UAAM,KAAK,cAAc,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,YAAY,SAAS,CAAC;AAC9E,UAAM,KAAK,cAAc,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,YAAY,WAAW,CAAC;AAChF,UAAM,KAAK,cAAc,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,YAAY,SAAS,CAAC;AAC9E,UAAM,KAAK,cAAc,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,YAAY,WAAW,CAAC;AAChF,UAAM,KAAK,MAAM,KAAK,IAAI,IAAI,KAAK,IAAI,EAAE;AACzC,UAAM,KAAK,MAAM,KAAK,IAAI,IAAI,KAAK,IAAI,EAAE;AACzC,UAAM,MAAM,GAAG,eAAe,KAAK,oBAAoB,KAAK,KAAK,KAAK,IAAI,GAAG;AAC7E,UAAM,MAAM,GAAG,eAAe,KAAK,oBAAoB,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,GAAG;AACvF,UAAM,aAAa,QAAQ,IAAI,IAAI,IAAI,IAAI,aAAa;AACxD,eAAW,cAAc,IAAI,IAAI,IAAI,EAAE;AACvC,eAAW,eAAe;AAC1B,UAAM,KAAK,UAAU;AACrB,UAAM,MAAM,GAAG,eAAe,KAAK,oBAAoB,KAAK,QAAQ,KAAK,IAAI,EAAE;AAC/E,UAAM,MAAM,GAAG,eAAe,KAAK,oBAAoB,KAAK,KAAK,KAAK,QAAQ,KAAK,IAAI,EAAE;AACzF,UAAM,kBAAkB,QAAQ,IAAI,IAAI,IAAI,IAAI,QAAQ;AACxD,oBAAgB,cAAc,IAAI,IAAI,IAAI,EAAE;AAC5C,oBAAgB,eAAe;AAC/B,UAAM,KAAK,eAAe;AAC1B,UAAM,MAAM,GAAG,eAAe,KAAK,oBAAoB,KAAK,KAAK,KAAK,IAAI,GAAG;AAC7E,UAAM,MAAM,GAAG,eAAe,KAAK,oBAAoB,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,GAAG;AACvF,UAAM,aAAa,QAAQ,IAAI,IAAI,IAAI,IAAI,aAAa;AACxD,eAAW,cAAc,IAAI,IAAI,IAAI,EAAE;AACvC,eAAW,eAAe;AAC1B,UAAM,KAAK,UAAU;AACrB,UAAM,MAAM,GAAG,eAAe,KAAK,oBAAoB,KAAK,QAAQ,KAAK,IAAI,EAAE;AAC/E,UAAM,MAAM,GAAG,eAAe,KAAK,oBAAoB,KAAK,KAAK,KAAK,QAAQ,KAAK,IAAI,EAAE;AACzF,UAAM,kBAAkB,QAAQ,IAAI,IAAI,IAAI,IAAI,QAAQ;AACxD,oBAAgB,cAAc,IAAI,IAAI,IAAI,EAAE;AAC5C,oBAAgB,eAAe;AAC/B,UAAM,KAAK,eAAe;AAC1B,UAAM,KAAK,GAAG,KAAK,gBAAgB,CAAC;AACpC,WAAO;AAAA,EACR;AAAA,EACA,kBAA2B;AAC1B,UAAM,OAAgB,CAAC;AACvB,UAAM,KAAK,MAAM,KAAK,IAAI,IAAI,KAAK,IAAI,EAAE;AACzC,UAAM,SAAS,GAAG,eAAe,KAAK,oBAAoB,KAAK,KAAK,KAAK,IAAI,GAAG;AAChF,UAAM,SAAS,GAAG,eAAe,KAAK,oBAAoB,KAAK,KAAK,KAAK,IAAI,GAAG;AAChF,SAAK,KAAK,MAAM,OAAO,IAAI,OAAO,IAAI,WAAW,UAAU,CAAC;AAC5D,SAAK,KAAK,MAAM,OAAO,IAAI,OAAO,IAAI,WAAW,UAAU,CAAC;AAC5D,UAAM,SAAS,KAAK,oBAAoB,KAAK,MAAM,KAAK,KAAK;AAC7D,UAAM,SAAS,KAAK,oBAAoB,KAAK,MAAM,KAAK,KAAK;AAC7D,UAAM,SAAS,OAAO,eAAe,QAAQ,KAAK,KAAK;AACvD,UAAM,SAAS,OAAO,eAAe,QAAQ,KAAK,KAAK;AACvD,SAAK,KAAK,MAAM,OAAO,IAAI,OAAO,IAAI,WAAW,UAAU,CAAC;AAC5D,SAAK,KAAK,MAAM,OAAO,IAAI,OAAO,IAAI,WAAW,UAAU,CAAC;AAC5D,QAAI,UAAU,KAAK;AACnB,WAAO,UAAU,KAAK,QAAQ,KAAK,MAAM;AACxC,iBAAW,KAAK;AAChB,YAAM,SAAS,OAAO,eAAe,QAAQ,OAAO;AACpD,WAAK,KAAK,MAAM,OAAO,IAAI,OAAO,IAAI,WAAW,UAAU,CAAC;AAAA,IAC7D;AACA,QAAI,UAAU,KAAK;AACnB,WAAO,UAAU,KAAK,QAAQ,KAAK,MAAM;AACxC,iBAAW,KAAK;AAChB,YAAM,SAAS,OAAO,eAAe,QAAQ,OAAO;AACpD,WAAK,KAAK,MAAM,OAAO,IAAI,OAAO,IAAI,WAAW,UAAU,CAAC;AAAA,IAC7D;AACA,WAAO;AAAA,EACR;AAAA,EACA,SAAiB;AAChB,WAAO,KAAK;AAAA,EACb;AAAA,EACA,gBAAwB;AACvB,QAAI,QAAQ,KAAK,OAAO,KAAK;AAC7B,WAAO,UAAU,QAAQ,KAAK,KAAK,KAAK,GAAG;AAC1C,cAAQ,UAAU,QAAQ,KAAK,KAAK;AAAA,IACrC;AACA,QAAI,QAAQ,KAAK,OAAO,KAAK;AAC7B,WAAO,UAAU,QAAQ,KAAK,KAAK,KAAK,GAAG;AAC1C,cAAQ,UAAU,QAAQ,KAAK,KAAK;AAAA,IACrC;AACA,UAAM,QAAQ,QAAQ,KAAK,IAAI;AAC/B,UAAM,QAAQ,QAAQ,KAAK,IAAI;AAC/B,UAAM,QAAQ,KAAK,oBAAoB,KAAK,KAAK,KAAK,MAAM,QAAQ,KAAK,IAAI;AAC7E,UAAM,QAAQ,KAAK,oBAAoB,KAAK,KAAK,KAAK,MAAM,QAAQ,KAAK,IAAI;AAC7E,UAAM,SAAS,QAAQ,KAAK,IAAI,KAAK,KAAK,IAAI;AAC9C,QAAI,UAAU,IAAI,KAAK,KAAK,cAAc,MAAM;AAChD,WAAO,UAAU,UAAU,KAAK,IAAI,KAAK,KAAK,KAAK,GAAG;AACrD,gBAAU,UAAU,UAAU,KAAK,IAAI,EAAE;AAAA,IAC1C;AACA,UAAM,aAAa,UAAU;AAC7B,UAAM,aAAc,aAAa,KAAK,IAAI,MAAO,KAAK,IAAI;AAC1D,UAAM,WAAW,aAAa,KAAK,IAAI;AACvC,UAAM,WAAW,aAAa,KAAK,IAAI;AACvC,SAAK,OAAO,mBAAmB,KAAK,SAAS,UAAU,CAAC,CAAC,OAAO;AAAA,MAC/D,SAAS,UAAU;AAAA,IACpB,CAAC;AAAA;AACD,SAAK,OAAO,kCAAkC,KAAK,QAAQ,CAAC,YAAY;AAAA,MACvE;AAAA,IACD,CAAC;AAAA;AACD,QAAI,cAAc;AAClB,QAAI,KAAK,qBAAqB,GAAG;AAChC,oBAAc;AAAA,IACf,WAAW,KAAK,qBAAqB,GAAG;AACvC,oBAAc;AAAA,IACf,WAAW,KAAK,qBAAqB,GAAG;AACvC,oBAAc,QAAQ,aAAa;AAAA,IACpC,OAAO;AACN,YAAM,uCAAuC,KAAK,gBAAgB;AAAA,IACnE;AACA,WAAO,WAAW,WAAW;AAAA,EAC9B;AACD;AAEA,SAAS,WACR,KACA,KACA,YACA,mBACA,WACA,kBACa;AACb,QAAM,MAAM,IAAI;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACA,SAAO;AACR;;;AE3uBA,SAAS,WAAAC,UAAS,iBAAAC,gBAAe,SAAAC,QAAO,QAAAC,aAAY;AAEpD,SAAS,WACR,IACA,IACA,YACA,OACA,UACA,WACA,WACA,WACA,WACW;AACX,MAAI,OAAiBF,eAAc,IAAI,IAAI,UAAU;AACrD,MAAI,QAAQ,GAAG;AACd,QAAI,WAAW,IAAI,YAAY;AAC9B,YAAM,+BAA+BE,MAAK,QAAQ,CAAC,8BAA8BA;AAAA,QAChF;AAAA,MACD,CAAC;AAAA,IACF;AACA,UAAM,SAAS,KAAK,KAAK,YAAY,IAAI,WAAW;AACpD,UAAM,UAAW,IAAI,KAAK,KAAM;AAChC,QAAI,UAAU,MAAM,SAAS,GAAG;AAC/B,YAAM,+BAA+BA,MAAK,QAAQ,CAAC,aAAa,KAAK;AAAA,IACtE;AACA,QAAI,YAAY,WAAW,GAAG;AAC7B,YAAM,gCAAgCA;AAAA,QACrC;AAAA,MACD,CAAC,kCAAkCA,MAAK,QAAQ,CAAC;AAAA,IAClD;AACA,QAAI,YAAY,YAAY,WAAW;AACtC,YAAM,iCAAiCA,MAAK,SAAS,CAAC,IAAIA;AAAA,QACzD;AAAA,MACD,CAAC,mCAAmCA,MAAK,QAAQ,CAAC;AAAA,IACnD;AACA,UAAM,WAAW,UAAU,IAAI,SAAS,KAAK,KAAK,OAAO;AACzD,UAAM,MAAMD,OAAM,IAAI,EAAE;AACxB,UAAM,OAAO,IAAI,eAAe,WAAW,aAAa,SAAS;AACjE,UAAM,OAAO,KAAK,eAAe,YAAY,KAAK,KAAK,GAAG,WAAW,CAAC;AACtE,WAAOF,SAAQ,KAAK,IAAI,KAAK,EAAE;AAC/B,aAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC/B,YAAM,UAAU,YAAY,IAAI;AAChC,YAAM,UAAU,UAAU;AAC1B,YAAM,MAAM,IAAI,eAAe,UAAU,QAAQ,UAAU;AAC3D,YAAM,MAAM,IAAI,eAAe,UAAU,QAAQ,UAAU;AAC3D,YAAM,OAAO,IAAI,eAAe,SAAS,aAAa,SAAS;AAC/D,YAAM,MAAM,KAAK,eAAe,UAAU,KAAK,KAAK,GAAG,WAAW,CAAC;AACnE,YAAM,OAAO,IAAI,eAAe,SAAS,aAAa,SAAS;AAC/D,YAAM,MAAM,KAAK,eAAe,UAAU,KAAK,KAAK,GAAG,WAAW,CAAC;AACnE,WAAK,cAAc,IAAI,IAAI,IAAI,EAAE,EAAE,iBAAiB,SAAS;AAC7D,WAAK,cAAc,IAAI,IAAI,IAAI,EAAE,EAAE,iBAAiB,SAAS;AAC7D,WAAK,UAAU,IAAI,IAAI,IAAI,EAAE,EAC3B,UAAU,YAAY,UAAU,IAAI,EACpC,iBAAiB,SAAS;AAC5B,WAAK,cAAc,IAAI,IAAI,IAAI,EAAE,EAAE,iBAAiB,SAAS;AAAA,IAC9D;AACA,SAAK,eAAe;AAAA,EACrB;AACA,SAAO;AACR;AAEA,SAAS,eACR,IACA,IACA,WACA,WACA,SACA,YACA,YACA,WACa;AACb,QAAM,UAAW,IAAI,KAAK,KAAM;AAChC,QAAM,SAAS,KAAK,KAAK,cAAc,IAAI,UAAU;AACrD,QAAM,SAAS,KAAK,KAAK,cAAc,IAAI,UAAU;AACrD,MAAI,aAAa,IAAI,WAAW;AAC/B,UAAM,qCAAqCG,MAAK,UAAU,CAAC,4BAA4BA;AAAA,MACtF;AAAA,IACD,CAAC;AAAA,EACF;AACA,MAAI,YAAY,YAAY,MAAM,YAAY;AAC7C,UAAM,oCAAoCA,MAAK,SAAS,CAAC,eAAeA;AAAA,MACvE;AAAA,IACD,CAAC,mBAAmBA,MAAK,UAAU,CAAC;AAAA,EACrC;AAEA,MAAI,UAAU,IAAI,SAAS,MAAM,KAAK,KAAK,aAAa,SAAS,GAAG;AACnE,UAAM,kCAAkC,OAAO,gBAAgBA;AAAA,MAC9D;AAAA,IACD,CAAC,kBAAkBA,MAAK,UAAU,CAAC;AAAA,EACpC;AACA,QAAM,QAAQ,cAAc,IAAI,KAAK,IAAI,UAAU,CAAC;AACpD,QAAM,WAAW,UAAU,IAAI,SAAS,MAAM,KAAK,KAAK,aAAa,SAAS,IAAI,OAAO;AACzF,QAAM,WAAW,UAAU,IAAI,SAAS,KAAK,KAAK,OAAO;AAEzD,QAAM,MAAMD,OAAM,IAAI,EAAE;AACxB,QAAM,QAAoB,CAAC;AAC3B,WAAS,IAAI,GAAG,IAAI,SAAS,KAAK;AACjC,UAAM,UAAU,YAAY,IAAI;AAChC,UAAM,UAAU,UAAU;AAC1B,UAAM,UAAU,UAAU,UAAU;AACpC,UAAM,MAAM,IAAI,eAAe,UAAU,QAAQ,SAAS;AAC1D,UAAM,MAAM,IAAI,eAAe,UAAU,QAAQ,SAAS;AAC1D,UAAM,MAAM,IAAI,eAAe,UAAU,QAAQ,SAAS;AAC1D,UAAM,MAAM,IAAI,eAAe,UAAU,QAAQ,SAAS;AAC1D,UAAM,MAAM,IAAI,eAAe,SAAS,KAAK;AAC7C,UAAM,MAAMF,SAAQ,IAAI,IAAI,IAAI,EAAE;AAClC,QAAI,iBAAiB,UAAU;AAC/B,QAAI,UAAU,IAAI,IAAI,IAAI,EAAE,EAC1B,UAAU,WAAW,UAAU,IAAI,EACnC,iBAAiB,UAAU;AAC7B,QAAI,UAAU;AACb,UAAI,cAAc,IAAI,IAAI,IAAI,EAAE,EAAE,iBAAiB,UAAU;AAAA,IAC9D,OAAO;AACN,UAAI,cAAc,IAAI,IAAI,IAAI,EAAE,EAAE,iBAAiB,UAAU;AAC7D,UAAI,UAAU,IAAI,IAAI,IAAI,EAAE,EAC1B,UAAU,WAAW,UAAU,KAAK,EACpC,iBAAiB,UAAU;AAAA,IAC9B;AACA,QAAI,eAAe;AACnB,UAAM,KAAK,GAAG;AAAA,EACf;AACA,SAAO;AACR;AAcA,SAAS,YACR,aACA,eACA,iBACA,iBACA,gBACA,aACA,mBACA,mBACA,iBACA,YACW;AACX,QAAM,MAAM,aAAa,IAAI;AAC7B,QAAM,kBAAkB,cAAc;AACtC,QAAM,kBAAkB,kBAAkB;AAC1C,QAAM,iBAAiB,kBAAkB;AACzC,QAAM,OAAOI,SAAQ,GAAG,CAAC,cAAc;AACvC,OAAK,cAAc,MAAM,iBAAiB,CAAC,cAAc,EACvD,iBAAiB,iBAAiB,EAClC,cAAc,MAAM,iBAAiB,CAAC,eAAe,EACrD,iBAAiB,iBAAiB,EAClC,cAAc,MAAM,gBAAgB,CAAC,eAAe,EACpD,cAAc,MAAM,aAAa,CAAC,eAAe,EACjD,iBAAiB,eAAe,EAChC,cAAc,MAAM,aAAa,eAAe,EAChD,iBAAiB,eAAe,EAChC,cAAc,MAAM,gBAAgB,eAAe,EACnD,cAAc,MAAM,iBAAiB,eAAe,EACpD,iBAAiB,iBAAiB,EAClC,cAAc,MAAM,iBAAiB,cAAc,EACnD,iBAAiB,iBAAiB,EAClC,cAAc,GAAG,cAAc,EAC/B,eAAe;AACjB,SAAO;AACR;;;AH1JA,IAAM,OAAkB;AAAA,EACvB,UAAU;AAAA,EACV,QAAQ;AAAA;AAAA,IAEP,QAAQ,UAAU,MAAM,IAAI,KAAK,KAAK,GAAG;AAAA,IACzC,QAAQ,MAAM,UAAU,IAAI,GAAG,KAAM,CAAC;AAAA,IACtC,QAAQ,MAAM,UAAU,IAAI,GAAG,KAAM,CAAC;AAAA,IACtC,QAAQ,qBAAqB,UAAU,GAAG,MAAM,KAAK,CAAC;AAAA,IACtD,QAAQ,gBAAgB,MAAM,GAAG,GAAG,KAAK,IAAI;AAAA,IAC7C,QAAQ,OAAO,MAAM,GAAG,MAAM,KAAK,CAAC;AAAA,IACpC,QAAQ,OAAO,MAAM,GAAG,MAAM,KAAK,CAAC;AAAA,IACpC,QAAQ,OAAO,UAAU,GAAG,KAAK,GAAG,IAAI;AAAA,IACxC,QAAQ,OAAO,UAAU,GAAG,KAAK,GAAG,IAAI;AAAA,IACxC,QAAQ,OAAO,UAAU,MAAM,KAAK,GAAG,IAAI;AAAA,IAC3C,QAAQ,WAAW,MAAM,GAAG,GAAG,IAAI,GAAG;AAAA,IACtC,QAAQ,OAAO,UAAU,GAAG,KAAK,GAAG,IAAI;AAAA,IACxC,QAAQ,OAAO,UAAU,GAAG,KAAK,GAAG,IAAI;AAAA,IACxC,QAAQ,OAAO,UAAU,MAAM,KAAK,GAAG,IAAI;AAAA,IAC3C,QAAQ,WAAW,MAAM,GAAG,GAAG,IAAI,GAAG;AAAA,IACtC,QAAQ,OAAO,KAAK,IAAI,IAAI,IAAI,GAAG;AAAA,IACnC,QAAQ,OAAO,KAAK,IAAI,IAAI,IAAI,GAAG;AAAA,IACnC,UAAU,YAAY,IAAI;AAAA,IAC1B,UAAU,aAAa,CAAC,WAAW,UAAU,UAAU,iBAAiB,aAAa,CAAC;AAAA,IACtF,UAAU,aAAa,CAAC,WAAW,UAAU,UAAU,iBAAiB,aAAa,CAAC;AAAA,IACtF,QAAQ,QAAQ,MAAM,IAAI,IAAI,KAAM,IAAI;AAAA,IACxC,QAAQ,QAAQ,MAAM,IAAI,IAAI,KAAM,IAAI;AAAA,IACxC,QAAQ,QAAQ,MAAM,IAAI,IAAI,KAAM,IAAI;AAAA,IACxC,QAAQ,QAAQ,MAAM,IAAI,IAAI,KAAM,IAAI;AAAA,IACxC,QAAQ,kBAAkB,UAAU,GAAG,GAAG,IAAI,CAAC;AAAA,IAC/C,QAAQ,kBAAkB,UAAU,GAAG,GAAG,IAAI,CAAC;AAAA,IAC/C,QAAQ,kBAAkB,MAAM,GAAG,IAAI,GAAG,IAAI;AAAA,IAC9C,QAAQ,kBAAkB,MAAM,GAAG,IAAI,GAAG,IAAI;AAAA,IAC9C,QAAQ,cAAc,UAAU,GAAG,MAAM,KAAK,CAAC;AAAA,IAC/C,UAAU,eAAe,CAAC,SAAS,QAAQ,QAAQ,CAAC;AAAA,IACpD,UAAU,eAAe,IAAI;AAAA,IAC7B,QAAQ,cAAc,MAAM,IAAI,KAAK,KAAK,GAAG;AAAA,IAC7C,QAAQ,SAAS,UAAU,GAAG,GAAG,IAAI,CAAC;AAAA,IACtC,QAAQ,YAAY,MAAM,GAAG,GAAG,KAAK,GAAG;AAAA,IACxC,QAAQ,aAAa,MAAM,GAAG,GAAG,KAAK,GAAG;AAAA,IACzC,QAAQ,aAAa,MAAM,GAAG,GAAG,IAAI,GAAG;AAAA,IACxC,QAAQ,aAAa,MAAM,GAAG,GAAG,IAAI,GAAG;AAAA,IACxC,UAAU,UAAU,IAAI;AAAA,IACxB,QAAQ,qBAAqB,MAAM,IAAI,GAAG,KAAK,GAAG;AAAA,IAClD,QAAQ,qBAAqB,MAAM,IAAI,GAAG,KAAK,GAAG;AAAA,IAClD,QAAQ,WAAW,UAAU,GAAG,GAAG,IAAI,CAAC;AAAA,IACxC,QAAQ,cAAc,MAAM,IAAI,GAAG,KAAK,GAAG;AAAA,IAC3C,QAAQ,cAAc,MAAM,IAAI,GAAG,IAAI,GAAG;AAAA,IAC1C,UAAU,aAAa,IAAI;AAAA,IAC3B,QAAQ,eAAe,MAAM,IAAI,KAAK,KAAK,GAAG;AAAA,IAC9C,QAAQ,iBAAiB,MAAM,GAAG,GAAG,IAAI,GAAG;AAAA,IAC5C,QAAQ,mBAAmB,MAAM,IAAI,GAAG,KAAK,GAAG;AAAA,IAChD,QAAQ,mBAAmB,MAAM,IAAI,GAAG,KAAK,GAAG;AAAA,IAChD,QAAQ,kBAAkB,MAAM,IAAI,GAAG,KAAK,GAAG;AAAA,IAC/C,QAAQ,oBAAoB,MAAM,GAAG,GAAG,IAAI,GAAG;AAAA,IAC/C,QAAQ,qBAAqB,MAAM,GAAG,GAAG,IAAI,GAAG;AAAA,IAChD,QAAQ,qBAAqB,MAAM,GAAG,GAAG,IAAI,GAAG;AAAA,IAChD,QAAQ,mBAAmB,MAAM,GAAG,GAAG,IAAI,GAAG;AAAA,EAC/C;AAAA,EACA,UAAU;AAAA,IACT,QAAQ;AAAA,IACR,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,mBAAmB;AAAA,IACnB,cAAc;AAAA,IACd,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,SAAS;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,SAAS;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,IACV,WAAW;AAAA,IACX,WAAW;AAAA,IACX,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,UAAU;AAAA,IACV,WAAW;AAAA,IACX,WAAW;AAAA,IACX,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,aAAa;AAAA,IACb,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,EAClB;AAAA,EACA,KAAK;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA;AAAA,EACV;AACD;AAEA,SAAS,MAAM,GAAW,OAAyB;AAClD,QAAM,SAAS,SAAS,KAAK,QAAQ;AACrC,QAAM,SAAS,OAAO;AACtB,QAAM,SAAS,OAAO;AACtB,SAAO,UAAU,GAAG,OAAO,QAAQ,aAAa,CAAC;AAAA;AACjD,MAAI;AAGH,UAAM,MAAe,UAAU;AAC/B,UAAM,MAAe,UAAU;AAC/B,QAAI,sBAAsB,MAAM,QAAQ,MAAM,EAAE;AAChD,QAAI,sBAAsB,MAAM,QAAQ,MAAM,EAAE;AAChD,QAAI,mBAAmB,MAAM,KAAK,MAAM,GAAG;AAC3C,UAAM,MAAM,SAAS,MAAM,iBAAiB;AAC5C,UAAM,CAAC,KAAK,KAAK,GAAG,IAAa,UAAU,KAAK,KAAK,KAAK,MAAM,YAAY;AAC5E,QAAI,mBAAmB,KAAK,GAAG;AAC/B,QAAI,iBAAiB,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,OAAO;AACnE,QAAI,iBAAiB,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,OAAO;AAEnE,UAAM,CAAC,MAAM,MAAM,MAAM,IAAI,IAAa;AAAA,MACzC;AAAA,MACA;AAAA,MACA,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IACP;AACA,QAAI,gBAAgB,MAAM,IAAI;AAC9B,QAAI,gBAAgB,MAAM,IAAI;AAC9B,QAAI,sBAAsB,MAAM,GAAG;AACnC,QAAI,sBAAsB,MAAM,GAAG;AACnC,UAAM,aAAa,SAAS,MAAM,UAAU,IAAK,IAAI,IAAI,IAAI,KAAM;AACnE,QAAI,WAAW,YAAY,GAAG;AAC9B,UAAM,SAAkB,WAAW,KAAK,KAAK,YAAY,KAAK,KAAK,MAAM,WAAW;AACpF,WAAO,QAAQ;AACf,eAAW,SAAS,OAAO,YAAY,GAAG;AACzC,aAAO,YAAY,KAAK;AAAA,IACzB;AACA,WAAO,UAAU,OAAO,gBAAgB,CAAC;AACzC,QAAI,WAAW,OAAO,cAAc,GAAG,MAAM,KAAK,EAAE;AACpD,WAAO,UAAU,OAAO,OAAO;AAC/B,QAAI,oBAAoB,MAAM,gBAAgB,MAAM,cAAc;AAClE,QAAI,oBAAoB,MAAM,gBAAgB,MAAM,cAAc;AAElE,eAAW,aAAa,IAAI,cAAc,GAAG;AAC5C,aAAO,YAAY,SAAS;AAAA,IAC7B;AACA,eAAW,aAAa,IAAI,cAAc,GAAG;AAC5C,aAAO,YAAY,SAAS;AAAA,IAC7B;AACA,WAAO,YAAY,IAAI,YAAY,CAAC;AACpC,WAAO,YAAY,IAAI,YAAY,CAAC;AAEpC,UAAM,OAAO,IAAI,WAAW;AAC5B,WAAO,UAAU,IAAI,OAAO;AAC5B,WAAO,UAAU,KAAK,MAAM;AAC5B,WAAO,QAAQ,IAAI;AACnB,QAAI,MAAM,gBAAgB,GAAG;AAC5B,YAAM,SAAe;AAAA,QACpB,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN;AAAA,MACD;AACA,aAAO,UAAU,OAAO,MAAM;AAC9B,aAAO,QAAQ,MAAM;AAAA,IACtB;AACA,QAAI,MAAM,WAAW,GAAG;AACvB,YAAM,uBAAuB,IAAI;AACjC,YAAM,uBAAuB,MAAM,aAAa,MAAM;AACtD,YAAM,oBAAoB,uBAAuB,MAAM;AACvD,YAAM,oBAAoB,uBAAuB,MAAM;AACvD,UAAI,oBAAoB,mBAAmB;AAC1C,cAAM,6BAA6BC;AAAA,UAClC;AAAA,QACD,CAAC,kCAAkCA,MAAK,iBAAiB,CAAC;AAAA,MAC3D;AACA,YAAM,WAAiB;AAAA,QACtB,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN;AAAA,MACD;AACA,iBAAW,aAAa,UAAU;AACjC,eAAO,UAAU,UAAU,MAAM;AACjC,eAAO,QAAQ,SAAS;AAAA,MACzB;AAAA,IACD;AACA,UAAM,OAAO,IAAI,WAAW;AAC5B,WAAO,UAAU,KAAK,MAAM;AAC5B,WAAO,UAAU,IAAI;AAErB,UAAM,cAAc,IAAI,KAAK,MAAM;AACnC,QAAI,MAAM,cAAc,GAAG;AAC1B,YAAM,uBAA6B;AAAA,QAClC,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN;AAAA,QACA,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN;AAAA,MACD;AACA,YAAM,sBAA4B;AAAA,QACjC,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN;AAAA,QACA,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN;AAAA,MACD;AACA,aAAO,QAAQ,oBAAoB;AACnC,aAAO,UAAU,mBAAmB;AAAA,IACrC,OAAO;AACN,YAAM,uBAAuBC,SAAQ,GAAG,CAAC,MAAM,cAAc,CAAC,EAC5D,cAAc,GAAG,MAAM,WAAW,EAClC,cAAc,aAAa,CAAC,EAC5B,cAAc,GAAG,CAAC,MAAM,WAAW,EACnC,eAAe;AACjB,YAAM,sBAAsBA,SAAQ,GAAG,CAAC,MAAM,cAAc,CAAC,EAC3D,cAAc,GAAG,MAAM,WAAW,EAClC,cAAc,CAAC,aAAa,CAAC,EAC7B,cAAc,GAAG,CAAC,MAAM,WAAW,EACnC,eAAe;AACjB,aAAO,QAAQ,oBAAoB;AACnC,aAAO,UAAU,mBAAmB;AAAA,IACrC;AACA,WAAO,MAAM,EAAE,cAAc,QAAQ,aAAa,OAAO;AACzD,UAAM,aAAa,OAAO;AAC1B,UAAM,cACL,MAAM,cAAc,IAAI,MAAM,gBAAgB,MAAM,kBAAkB;AACvE,WAAO,MAAM;AAAA,MACZ,UAAU;AAAA,QACT;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAe,SAAS;AAAA,UACxB,QAAQ,IAAI;AAAA,UACZ,QAAQ,CAAC,GAAG,GAAG,CAAC;AAAA,UAChB,WAAW,CAAC,GAAG,GAAG,CAAC,WAAW;AAAA,QAC/B;AAAA,QACA;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAe,SAAS;AAAA,UACxB,QAAQ,CAAC,GAAG,GAAG,CAAC;AAAA,UAChB,WAAW,CAAC,GAAG,GAAG,CAAC;AAAA,QACpB;AAAA,MACD;AAAA,MACA,SAAS;AAAA,QACR;AAAA,UACC,SAAS,OAAO,UAAU;AAAA,UAC1B,YAAY,SAAS;AAAA,UACrB,QAAQ;AAAA,YACP,UAAU,UAAU;AAAA,YACpB,UAAU,UAAU;AAAA,UACrB;AAAA,QACD;AAAA,MACD;AAAA,IACD;AACA,WAAO,UAAU;AACjB,WAAO,UAAU;AAAA,EAClB,SAAS,MAAM;AACd,WAAO,UAAU;AACjB,YAAQ,IAAI,IAAc;AAAA,EAC3B;AACA,SAAO;AACR;AAEA,IAAM,oBAA8B;AAAA,EACnC,QAAQ;AAAA,EACR,cAAc;AAAA,EACd;AAAA,EACA;AACD;;;AIjUA;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EAEA,UAAAC;AAAA,EAGA,WAAAC;AAAA,EACA,aAAAC;AAAA,EAEA,YAAAC;AAAA,EAEA,YAAAC;AAAA,OACM;AAOP,IAAMC,QAAkB;AAAA,EACvB,UAAU;AAAA,EACV,QAAQ;AAAA;AAAA,IAEPC,SAAQ,UAAU,MAAM,IAAI,KAAK,KAAK,GAAG;AAAA,IACzCA,SAAQ,MAAM,UAAU,IAAI,GAAG,KAAM,CAAC;AAAA;AAAA;AAAA;AAAA,IAItCA,SAAQ,OAAO,MAAM,GAAG,MAAM,KAAK,CAAC;AAAA,IACpCA,SAAQ,OAAO,MAAM,GAAG,MAAM,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAwBpCC,WAAU,eAAe,IAAI;AAAA,IAC7BD,SAAQ,cAAc,MAAM,IAAI,KAAK,KAAK,GAAG;AAAA,IAC7CA,SAAQ,SAAS,UAAU,GAAG,GAAG,IAAI,CAAC;AAAA,IACtCA,SAAQ,YAAY,MAAM,GAAG,GAAG,KAAK,GAAG;AAAA,IACxCA,SAAQ,aAAa,MAAM,GAAG,GAAG,KAAK,GAAG;AAAA,IACzCA,SAAQ,aAAa,MAAM,GAAG,GAAG,IAAI,GAAG;AAAA,IACxCA,SAAQ,aAAa,MAAM,GAAG,GAAG,IAAI,GAAG;AAAA,IACxCC,WAAU,UAAU,IAAI;AAAA,IACxBD,SAAQ,qBAAqB,MAAM,IAAI,GAAG,KAAK,GAAG;AAAA,IAClDA,SAAQ,qBAAqB,MAAM,IAAI,GAAG,KAAK,GAAG;AAAA,IAClDA,SAAQ,WAAW,UAAU,GAAG,GAAG,IAAI,CAAC;AAAA,IACxCA,SAAQ,cAAc,MAAM,IAAI,GAAG,KAAK,GAAG;AAAA,IAC3CA,SAAQ,cAAc,MAAM,IAAI,GAAG,IAAI,GAAG;AAAA,IAC1CC,WAAU,aAAa,IAAI;AAAA,IAC3BD,SAAQ,eAAe,MAAM,IAAI,KAAK,KAAK,GAAG;AAAA,IAC9CA,SAAQ,iBAAiB,MAAM,GAAG,GAAG,IAAI,GAAG;AAAA,IAC5CA,SAAQ,mBAAmB,MAAM,IAAI,GAAG,KAAK,GAAG;AAAA,IAChDA,SAAQ,mBAAmB,MAAM,IAAI,GAAG,KAAK,GAAG;AAAA,IAChDA,SAAQ,kBAAkB,MAAM,IAAI,GAAG,KAAK,GAAG;AAAA,IAC/CA,SAAQ,oBAAoB,MAAM,GAAG,GAAG,IAAI,GAAG;AAAA,IAC/CA,SAAQ,qBAAqB,MAAM,GAAG,GAAG,IAAI,GAAG;AAAA,IAChDA,SAAQ,qBAAqB,MAAM,GAAG,GAAG,IAAI,GAAG;AAAA,IAChDA,SAAQ,mBAAmB,MAAM,GAAG,GAAG,IAAI,GAAG;AAAA,EAC/C;AAAA,EACA,UAAU;AAAA,IACT,QAAQ;AAAA,IACR,IAAI;AAAA;AAAA;AAAA;AAAA,IAIJ,KAAK;AAAA,IACL,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAwBL,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,UAAU;AAAA,IACV,WAAW;AAAA,IACX,WAAW;AAAA,IACX,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,aAAa;AAAA,IACb,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,EAClB;AAAA,EACA,KAAK;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA;AAAA,EACV;AACD;AAEA,SAASE,OAAM,GAAW,OAAyB;AAClD,QAAM,SAASC,UAASJ,MAAK,QAAQ;AACrC,QAAM,SAASK,QAAO;AACtB,QAAM,SAASA,QAAO;AACtB,SAAO,UAAU,GAAG,OAAO,QAAQ,aAAa,CAAC;AAAA;AACjD,MAAI;AAEH,UAAM,cAAc,YAAY,kBAAkB,IAAI;AACtD,gBAAY,OAAO,UAAU,MAAM,MAAM;AACzC,gBAAY,OAAO,MAAM,MAAM,EAAE;AACjC,gBAAY,OAAO,OAAO,MAAM,GAAG;AACnC,gBAAY,OAAO,OAAO,MAAM,GAAG;AACnC,gBAAY,OAAO,eAAe,MAAM,WAAW;AACnD,gBAAY,OAAO,cAAc,MAAM,UAAU;AACjD,gBAAY,OAAO,SAAS,MAAM,KAAK;AACvC,gBAAY,OAAO,YAAY,MAAM,QAAQ;AAC7C,gBAAY,OAAO,aAAa,MAAM,SAAS;AAC/C,gBAAY,OAAO,aAAa,MAAM,SAAS;AAC/C,gBAAY,OAAO,aAAa,MAAM,SAAS;AAC/C,gBAAY,OAAO,UAAU,MAAM,MAAM;AACzC,gBAAY,OAAO,qBAAqB,MAAM,iBAAiB;AAC/D,gBAAY,OAAO,qBAAqB,MAAM,iBAAiB;AAC/D,gBAAY,OAAO,WAAW,MAAM,OAAO;AAC3C,gBAAY,OAAO,cAAc,MAAM,UAAU;AACjD,gBAAY,OAAO,cAAc,MAAM,UAAU;AACjD,gBAAY,OAAO,aAAa,MAAM,SAAS;AAC/C,gBAAY,OAAO,eAAe,MAAM,WAAW;AACnD,gBAAY,OAAO,iBAAiB,MAAM,aAAa;AACvD,gBAAY,OAAO,mBAAmB,MAAM,eAAe;AAC3D,gBAAY,OAAO,mBAAmB,MAAM,eAAe;AAC3D,gBAAY,OAAO,kBAAkB,MAAM,cAAc;AACzD,gBAAY,OAAO,oBAAoB,MAAM,gBAAgB;AAC7D,gBAAY,OAAO,qBAAqB,MAAM,iBAAiB;AAC/D,gBAAY,OAAO,qBAAqB,MAAM,iBAAiB;AAC/D,gBAAY,OAAO,mBAAmB,MAAM,eAAe;AAC3D,UAAM,aAAa,kBAAkB,MAAM,GAAG,YAAY,YAAY,CAAC;AACvE,cAAU,UAAU;AACpB,WAAO,UAAU,UAAU,WAAW,QAAQ,YAAY,QAAQ;AAElE,WAAO,YAAY,WAAW,IAAI,YAAY;AAC9C,WAAO,YAAY,WAAW,IAAI,WAAW;AAE7C,WAAO,MAAM,EAAE,cAAc,QAAQ,aAAa,OAAO;AACzD,UAAM,aAAa,OAAO;AAC1B,WAAO,MAAM;AAAA,MACZ,UAAU;AAAA,QACT;AAAA,UACC,SAAS,SAAS,UAAU;AAAA,UAC5B,WAAW;AAAA,UACX,SAAS;AAAA,UACT,QAAQ,CAAC,GAAG,GAAG,CAAC;AAAA,UAChB,WAAW,CAAC,GAAG,GAAG,CAAC;AAAA,QACpB;AAAA,MACD;AAAA,MACA,UAAU,CAAC;AAAA,MACX,SAAS;AAAA,QACR;AAAA,UACC,SAAS,OAAO,UAAU;AAAA,UAC1B,YAAYC,UAAS;AAAA,UACrB,QAAQ,CAAC,SAAS,UAAU,SAAS;AAAA,QACtC;AAAA,MACD;AAAA,IACD;AAEA,UAAM,YAAsB;AAAA,MAC3B,UAAU,YAAY,YAAY;AAAA,MAClC,QAAQ,YAAY,mBAAmB;AAAA,MACvC,aAAa,CAAC,GAAG,GAAG,CAAC;AAAA,MACrB,UAAU,CAAC,GAAG,GAAG,CAAC;AAAA,IACnB;AAEA,WAAO,MAAM,EAAE,oBAAoB,UAAU;AAE7C,WAAO,UAAU;AACjB,WAAO,UAAU;AAAA,EAClB,SAAS,MAAM;AACd,WAAO,UAAU;AACjB,YAAQ,IAAI,IAAc;AAAA,EAC3B;AACA,SAAO;AACR;AAEA,IAAM,yBAAmC;AAAA,EACxC,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,MAAMN;AAAA,EACN,OAAOG;AACR;;;ACpOA;AAAA,EACC,eAAAI;AAAA,EACA,aAAAC;AAAA,EACA,aAAAC;AAAA,EAGA,UAAAC;AAAA,EACA,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,QAAAC;AAAA,EACA,WAAAC;AAAA,EAGA,YAAAC;AAAA,EAEA,YAAAC;AAAA,OACM;;;AChBP;AAAA,EACC,WAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,UAAAC;AAAA,EAEA,YAAAC;AAAA,EACA,QAAAC;AAAA,EACA,WAAAC;AAAA,EAGA,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,YAAAC;AAAA,OACM;AAEP,IAAMC,QAAkB;AAAA,EACvB,UAAU;AAAA,EACV,QAAQ;AAAA;AAAA,IAEPJ,SAAQ,MAAM,MAAM,KAAM,KAAK,KAAM,EAAE;AAAA,IACvCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAM,KAAK,KAAO,EAAE;AAAA,IACxCA,SAAQ,MAAM,MAAM,KAAM,KAAK,KAAO,EAAE;AAAA,IACxCA,SAAQ,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC;AAAA,IAChCA,SAAQ,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC;AAAA,IAC/BA,SAAQ,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC;AAAA,IAC/BA,SAAQ,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC;AAAA,IACjCA,SAAQ,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC;AAAA,IACjCA,SAAQ,MAAM,MAAM,KAAK,KAAK,MAAM,CAAC;AAAA,IACrCA,SAAQ,MAAM,MAAM,KAAK,IAAI,MAAM,CAAC;AAAA,IACpCA,SAAQ,MAAM,MAAM,MAAM,KAAK,MAAM,CAAC;AAAA,IACtCA,SAAQ,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC;AAAA,IACjCA,SAAQ,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC;AAAA,EAClC;AAAA,EACA,UAAU;AAAA,IACT,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACL;AAAA,EACA,KAAK;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA;AAAA,EACV;AACD;AAKA,SAASK,OAAM,GAAW,OAAyB;AAClD,MAAI;AACJ,MAAI;AACJ,QAAM,SAASJ,UAASG,MAAK,QAAQ;AACrC,QAAM,SAASP,QAAO;AACtB,QAAM,UAAUA,QAAO;AACvB,QAAM,YAAYA,QAAO;AACzB,QAAM,eAAeA,QAAO;AAC5B,QAAM,eAAeA,QAAO;AAC5B,SAAO,UAAU,GAAG,OAAO,QAAQ,aAAa,CAAC;AAAA;AACjD,MAAI;AACH,UAAM,KAAK,MAAM,KAAK;AACtB,UAAM,KAAK,MAAM,KAAK;AACtB,UAAM,KAAK,MAAM,KAAK;AACtB,QAAI,KAAK,IAAI;AACZ,YAAM,cAAc,MAAM,EAAE,sBAAsB,MAAM,EAAE;AAAA,IAC3D;AACA,QAAI,KAAK,MAAM,KAAK,IAAI;AACvB,YAAM,cAAc,MAAM,EAAE,WAAW,MAAM,EAAE,gCAAgC,MAAM,EAAE;AAAA,IACxF;AACA,UAAM,aAAa,MAAM,KAAK,MAAM;AACpC,WAAO,UAAU,gBAAgBE,MAAK,UAAU,CAAC;AAAA;AACjD,UAAM,YAAY,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AAC9C,WAAO,UAAU,oBAAoBA,MAAKD,UAAS,SAAS,CAAC,CAAC;AAAA;AAC9D,UAAM,WAAW,MAAM,KAAK,KAAK,IAAI,YAAY,CAAC;AAClD,UAAM,MAAM,MAAM,KAAK;AAEvB,qBAAiB,SAAU,QAAgB,QAA2B;AACrE,YAAM,eAAeH,SAAQ,SAAS,IAAI,CAAC,EACzC,cAAc,SAAS,IAAI,MAAM,EAAE,EACnC,cAAc,SAAS,IAAI,UAAU,EACrC;AAAA,QACA,CAAC,SAAS,MAAM,KAAK,KAAK,IAAI,SAAS;AAAA,QACvC,CAAC,MAAM,KAAK,KAAK,IAAI,SAAS;AAAA,MAC/B,EACC,cAAc,UAAU,KAAK,MAAM,KAAK,GAAG;AAC7C,UAAI,QAAQ;AACX,qBACE,cAAc,UAAU,KAAK,MAAM,KAAK,MAAM,EAAE,EAChD,cAAc,SAAS,IAAI,MAAM,EAAE,EACnC,cAAc,SAAS,IAAI,CAAC;AAAA,MAC/B,OAAO;AACN,qBAAa,cAAc,UAAU,KAAK,MAAM,KAAK,CAAC;AAAA,MACvD;AACA,mBAAa,eAAe;AAC5B,aAAO;AAAA,IACR;AACA,WAAO,QAAQ,eAAe,GAAG,KAAK,CAAC;AACvC,WAAO,UAAU,eAAe,GAAG,IAAI,CAAC;AACxC,WAAO,UAAU,eAAe,IAAI,IAAI,CAAC;AAEzC,UAAM,KAAK,MAAM,KAAK;AACtB,UAAM,qBAAqB,MAAM,KAAK,IAAI;AAC1C,QAAI,qBAAqB,GAAG;AAC3B,YAAM,cAAc,MAAM,EAAE,+BAA+B,MAAM,EAAE;AAAA,IACpE;AACA,QAAI,KAAK,MAAM,KAAK,GAAG;AACtB,YAAM,cAAc,MAAM,EAAE,+BAA+B,MAAM,EAAE;AAAA,IACpE;AACA,kBAAc,SAAU,KAAuB;AAC9C,YAAM,MAAM,KAAK;AACjB,YAAM,MAAM,MAAM,KAAK;AACvB,YAAM,eAAeA,SAAQ,KAAK,MAAM,kBAAkB,EACxD,UAAU,CAAC,KAAK,GAAG,EACnB,UAAU,KAAK,OAAO,IAAI,EAC1B,UAAU,CAAC,KAAK,CAAC,GAAG,EACpB,UAAU,KAAK,OAAO,IAAI,EAC1B,cAAc,GAAG,CAAC,kBAAkB,EACpC,UAAU,KAAK,CAAC,GAAG,EACnB,UAAU,KAAK,OAAO,IAAI,EAC1B,UAAU,KAAK,GAAG,EAClB,UAAU,KAAK,OAAO,IAAI,EAC1B,eAAe;AACjB,aAAO;AAAA,IACR;AACA,YAAQ,QAAQ,YAAY,CAAC,CAAC;AAC9B,YAAQ,QAAQ,YAAY,MAAM,EAAE,CAAC;AACrC,UAAM,cAAcA,SAAQ,IAAI,CAAC,EAC/B,cAAc,IAAI,MAAM,EAAE,EAC1B,cAAc,IAAI,UAAU,EAC5B,cAAc,CAAC,IAAI,UAAU,EAC7B,cAAc,CAAC,IAAI,MAAM,EAAE,EAC3B,cAAc,CAAC,IAAI,CAAC,EACpB,eAAe;AACjB,YAAQ,UAAU,WAAW;AAC7B,UAAM,cAAcA,SAAQ,CAAC,IAAI,MAAM,EAAE,EACvC,cAAc,GAAG,MAAM,EAAE,EACzB,cAAc,CAAC,MAAM,IAAI,CAAC,EAC1B,cAAc,GAAG,CAAC,MAAM,EAAE,EAC1B,eAAe;AACjB,YAAQ,UAAU,WAAW;AAE7B,cAAU,QAAQC,eAAc,GAAG,GAAG,EAAE,CAAC;AACzC,cAAU,QAAQA,eAAc,GAAG,GAAG,EAAE,CAAC;AACzC,UAAM,OAAO,KAAK,MAAM;AACxB,UAAM,OAAQ,IAAI,KAAK,KAAM,MAAM;AACnC,aAAS,IAAI,GAAG,IAAI,MAAM,IAAI,KAAK;AAClC,YAAM,OAAO,OAAO,KAAK,IAAI,IAAI,IAAI;AACrC,YAAM,OAAO,OAAO,KAAK,IAAI,IAAI,IAAI;AACrC,gBAAU,QAAQA,eAAc,MAAM,MAAM,MAAM,KAAK,CAAC,CAAC;AAAA,IAC1D;AACA,cAAU,UAAUA,eAAc,GAAG,GAAG,EAAE,CAAC;AAC3C,cAAU,UAAUA,eAAc,GAAG,GAAG,KAAK,MAAM,EAAE,CAAC;AAEtD,iBAAa,QAAQA,eAAc,GAAG,GAAG,KAAK,MAAM,EAAE,CAAC;AACvD,iBAAa,QAAQA,eAAc,GAAG,GAAG,KAAK,MAAM,EAAE,CAAC;AAEvD,iBAAa,QAAQ,YAAY,MAAM,EAAE,CAAC;AAE1C,WAAO,MAAM;AAAA,MACZ,SAAS;AAAA,MACT,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,WAAW;AAAA,IACZ;AACA,UAAM,aAAa,OAAO;AAC1B,WAAO,MAAM;AAAA,MACZ,UAAU;AAAA,QACT;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeM,UAAS;AAAA,UACxB,QAAQ,CAAC,GAAG,GAAG,CAAC;AAAA,UAChB,WAAW,CAAC,GAAG,GAAG,CAAC;AAAA,QACpB;AAAA,QACA;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeA,UAAS;AAAA,UACxB,QAAQ,MAAM;AAAA,UACd,QAAQ,CAAC,GAAG,GAAG,CAAC;AAAA,UAChB,WAAW,CAAC,GAAG,GAAG,CAAC;AAAA,QACpB;AAAA,QACA;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeA,UAAS;AAAA,UACxB,QAAQ,KAAK,MAAM;AAAA,UACnB,QAAQ,CAAC,KAAK,KAAK,GAAG,GAAG,CAAC;AAAA,UAC1B,WAAW,CAAC,GAAG,GAAG,CAAC;AAAA,QACpB;AAAA,QACA;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeA,UAAS;AAAA,UACxB,QAAQ,MAAM;AAAA,UACd,QAAQ,CAAC,GAAG,GAAG,CAAC;AAAA,UAChB,WAAW,CAAC,GAAG,GAAG,CAAC;AAAA,QACpB;AAAA,QACA;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeA,UAAS;AAAA,UACxB,QAAQ,KAAK,MAAM,KAAK;AAAA,UACxB,QAAQ,CAAC,KAAK,KAAK,GAAG,GAAG,CAAC;AAAA,UAC1B,WAAW,CAAC,GAAG,GAAG,CAAC;AAAA,QACpB;AAAA,MACD;AAAA,MACA,SAAS;AAAA,QACR;AAAA,UACC,SAAS,QAAQ,UAAU;AAAA;AAAA,UAE3B,YAAYC,UAAS;AAAA,UACrB,QAAQ,CAAC,UAAU,UAAU,SAAS,UAAU,UAAU,YAAY;AAAA,QACvE;AAAA,QACA;AAAA,UACC,SAAS,QAAQ,UAAU;AAAA,UAC3B,YAAYA,UAAS;AAAA,UACrB,QAAQ,CAAC,UAAU,UAAU,SAAS,UAAU,UAAU,YAAY;AAAA,QACvE;AAAA,QACA;AAAA,UACC,SAAS,OAAO,UAAU;AAAA,UAC1B,YAAYA,UAAS;AAAA,UACrB,QAAQ;AAAA,YACP,QAAQ,UAAU;AAAA,YAClB,UAAU,UAAU;AAAA,YACpB,QAAQ,UAAU;AAAA,UACnB;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAEA,WAAO,MAAM,CAAC;AAEd,WAAO,UAAU;AACjB,WAAO,UAAU;AAAA,EAClB,SAAS,MAAM;AACd,WAAO,UAAU;AACjB,YAAQ,IAAI,IAAc;AAAA,EAC3B;AACA,SAAO;AACR;AAEA,IAAM,gBAA0B;AAAA,EAC/B,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,MAAMC;AAAA,EACN,OAAOC;AACR;;;ACpQA;AAAA,EACC,WAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,UAAAC;AAAA,EAEA,YAAAC;AAAA,EACA,QAAAC;AAAA,EACA,WAAAC;AAAA,EAGA,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,YAAAC;AAAA,OACM;AAEP,IAAMC,QAAkB;AAAA,EACvB,UAAU;AAAA,EACV,QAAQ;AAAA;AAAA,IAEPJ,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAM,KAAK,KAAM,EAAE;AAAA,IACvCA,SAAQ,MAAM,MAAM,KAAK,GAAG,KAAM,EAAE;AAAA,IACpCA,SAAQ,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC;AAAA,IAChCA,SAAQ,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC;AAAA,IAChCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC;AAAA,IAChCA,SAAQ,MAAM,MAAM,KAAM,KAAK,KAAM,EAAE;AAAA,IACvCA,SAAQ,MAAM,MAAM,KAAK,IAAI,KAAM,EAAE;AAAA,IACrCA,SAAQ,MAAM,MAAM,KAAK,IAAI,KAAM,EAAE;AAAA,IACrCA,SAAQ,MAAM,MAAM,KAAM,KAAK,KAAM,EAAE;AAAA,IACvCA,SAAQ,MAAM,MAAM,KAAM,KAAK,KAAM,EAAE;AAAA,IACvCA,SAAQ,MAAM,MAAM,KAAK,IAAI,KAAK,EAAE;AAAA,IACpCA,SAAQ,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC;AAAA,IAChCA,SAAQ,MAAM,MAAM,KAAK,IAAI,KAAM,CAAC;AAAA,IACpCA,SAAQ,MAAM,MAAM,KAAK,IAAI,KAAM,CAAC;AAAA,IACpCA,SAAQ,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC;AAAA,IAC/BA,SAAQ,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC;AAAA,IACjCA,SAAQ,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC;AAAA,IACjCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAK,IAAI,KAAM,EAAE;AAAA,IACrCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC;AAAA,EAClC;AAAA,EACA,UAAU;AAAA,IACT,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACL;AAAA,EACA,KAAK;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA;AAAA,EACV;AACD;AAKA,SAASK,OAAM,GAAW,OAAyB;AAClD,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,QAAM,SAASJ,UAASG,MAAK,QAAQ;AACrC,QAAM,UAAUP,QAAO;AACvB,QAAM,UAAUA,QAAO;AACvB,QAAM,gBAAgBA,QAAO;AAC7B,QAAM,UAAUA,QAAO;AACvB,QAAM,UAAUA,QAAO;AACvB,QAAM,UAAUA,QAAO;AACvB,QAAM,gBAAgBA,QAAO;AAC7B,QAAM,UAAUA,QAAO;AACvB,SAAO,UAAU,GAAG,OAAO,QAAQ,aAAa,CAAC;AAAA;AACjD,MAAI;AACH,UAAM,KAAK,MAAM,KAAK;AACtB,UAAM,KAAK,MAAM,KAAK;AACtB,UAAM,KAAK,MAAM,KAAK;AACtB,UAAM,KAAK,MAAM,KAAK;AACtB,UAAM,KAAK,MAAM,KAAK;AACtB,UAAM,KAAK,MAAM,KAAK;AACtB,UAAM,KAAK,MAAM,KAAK;AACtB,UAAM,KAAK,MAAM,KAAK;AACtB,UAAM,OAAO,MAAM,KAAK,MAAM;AAC9B,UAAM,OAAO,OAAO,MAAM,KAAK,MAAM;AACrC,WAAO,UAAU,gBAAgBE,MAAK,IAAI,CAAC;AAAA;AAC3C,WAAO,UAAU,sBAAsBA,MAAK,IAAI,CAAC;AAAA;AACjD,QAAI,MAAM,KAAK,MAAM,IAAI;AACxB,YAAM,cAAc,MAAM,EAAE,sBAAsB,MAAM,EAAE;AAAA,IAC3D;AACA,QAAI,MAAM,KAAK,MAAM,KAAK,MAAM,IAAI;AACnC,YAAM,cAAc,MAAM,EAAE,+BAA+B,MAAM,EAAE,WAAW,MAAM,EAAE;AAAA,IACvF;AACA,QAAI,MAAM,KAAK,MAAM,KAAK,MAAM,IAAI;AACnC,YAAM,cAAc,MAAM,EAAE,+BAA+B,MAAM,EAAE,WAAW,MAAM,EAAE;AAAA,IACvF;AACA,QAAI,MAAM,KAAK,KAAK,MAAM,IAAI;AAC7B,YAAM,cAAc,MAAM,EAAE,+BAA+B,MAAM,EAAE,WAAW,MAAM,EAAE;AAAA,IACvF;AACA,QAAI,MAAM,KAAK,IAAI;AAClB,YAAM,cAAc,MAAM,EAAE,+BAA+B,MAAM,EAAE;AAAA,IACpE;AACA,QAAI,MAAM,MAAM,MAAM,IAAI;AACzB,YAAM,cAAc,MAAM,EAAE,+BAA+B,MAAM,EAAE;AAAA,IACpE;AACA,UAAM,QAAQ,IAAI,MAAM,KAAK,MAAM,KAAK,IAAI,MAAM;AAClD,UAAM,QAAQ,MAAM,KAAK,MAAM,KAAK,MAAM;AAC1C,UAAM,WAAW,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC;AAC1C,UAAM,WAAW,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC;AAC1C,UAAM,eAAe,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC;AAC9C,UAAM,eAAe,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC;AAC9C,UAAM,eAAe,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC;AAC9C,UAAM,eAAe,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC;AAC9C,UAAM,UAAU,CAAC,CAAC,QAAQ,GAAG,CAAC,MAAM,KAAK,IAAI,MAAM,IAAI,MAAM,KAAK,GAAG,QAAQ,IAAI,MAAM,EAAE;AACzF,UAAM,SAAS,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK;AAChD,QAAI,SAAS,GAAG;AACf,YAAM,cAAc,MAAM,EAAE,4BAA4B,MAAM,EAAE,QAAQ,MAAM,EAAE,WAAW,MAAM,EAAE;AAAA,IACpG;AACA,UAAM,YAAY,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AAC9C,WAAO,UAAU,eAAeA,MAAKD,UAAS,SAAS,CAAC,CAAC;AAAA;AACzD,UAAM,SAAS,QAAQ,IAAI,MAAM,KAAK,KAAK,MAAM,KAAK,KAAK,IAAI,SAAS;AACxE,UAAM,QAAQ,KAAK,KAAK,UAAU,IAAI,UAAU,CAAC;AACjD,UAAM,YAAY,KAAK,MAAM,QAAQ,MAAM;AAC3C,WAAO,UAAU,eAAeC,MAAKD,UAAS,SAAS,CAAC,CAAC;AAAA;AACzD,UAAM,WAAW,MAAM,KAAK,KAAK,IAAI,YAAY,SAAS;AAC1D,UAAM,SAAS,QAAQ,MAAM,KAAK,KAAK,IAAI,SAAS,IAAI;AACxD,UAAM,WAAW,KAAK,MAAM,KAAK,KAAK,IAAI,SAAS,IAAI,WAAW,KAAK,IAAI,SAAS;AACpF,UAAM,WAAW,MAAM,KAAK,MAAM,KAAK,WAAW,KAAK,IAAI,SAAS;AACpE,UAAM,YAAY,WAAW,KAAK,KAAK,IAAI,SAAS;AACpD,UAAM,YAAY,WAAW,KAAK,KAAK,IAAI,SAAS;AACpD,UAAM,SAAS,KAAK,MAAM;AAC1B,UAAM,YAAY,WAAW,MAAM,KAAK,KAAK,IAAI,SAAS;AAC1D,UAAM,YAAY,WAAW,MAAM,KAAK,KAAK,IAAI,SAAS;AAC1D,UAAM,aAAa,KAAK,KAAK,IAAI;AACjC,UAAM,WAAW,MAAM,KAAK;AAC5B,UAAM,YAAY,WAAW,MAAM,KAAK,KAAK,IAAI,SAAS;AAC1D,QAAI,YAAY,MAAM,IAAI;AACzB,YAAM,cAAc,MAAM,EAAE,0CAA0C,MAAM,EAAE;AAAA,IAC/E;AACA,QAAI,MAAM,KAAK,MAAM,IAAI;AACxB,YAAM,cAAc,MAAM,EAAE,4BAA4B,MAAM,EAAE;AAAA,IACjE;AAEA,UAAM,aAAa,MAAM,KAAK,KAAK,IAAI,SAAS;AAChD,UAAM,aAAa,MAAM,KAAK,KAAK,IAAI,SAAS;AAChD,UAAM,SAAS,MAAM,KAAK,KAAK,IAAI,YAAY,CAAC;AAChD,cAAU,SAAU,QAA0B;AAC7C,YAAM,OAAOH,SAAQ,SAAS,IAAI,CAAC,EACjC,cAAc,SAAS,IAAI,MAAM,EAAE,EACnC,cAAc,SAAS,IAAI,IAAI,EAC/B,cAAc,UAAU,KAAK,aAAa,OAAO,UAAU,EAC3D,cAAc,UAAU,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,EACzD,cAAc,UAAU,KAAK,MAAM,KAAK,CAAC,EACzC,eAAe;AACjB,aAAO;AAAA,IACR;AACA,kBAAc,SAAU,QAA0B;AACjD,YAAM,OAAOA,SAAQ,SAAS,IAAI,CAAC,EACjC,cAAc,SAAS,IAAI,MAAM,EAAE,EACnC,cAAc,SAAS,IAAI,IAAI,EAC/B,cAAc,UAAU,KAAK,aAAa,OAAO,UAAU,EAC3D,cAAc,UAAU,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,EACzD,cAAc,UAAU,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,EAAE,EAC3D,cAAc,SAAS,IAAI,MAAM,KAAK,MAAM,EAAE,EAC9C,cAAc,SAAS,IAAI,MAAM,KAAK,MAAM,KAAK,MAAM,EAAE,EACzD,cAAc,UAAU,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,EAAE,EACtE,cAAc,UAAU,KAAK,MAAM,KAAK,CAAC,EACzC,eAAe;AACjB,aAAO;AAAA,IACR;AACA,cAAU,SACT,OACA,QACA,MACA,MACA,OACW;AACX,YAAM,SAAS,QAAQ,KAAK,IAAI,KAAK;AACrC,YAAM,SAAS,QAAQ,KAAK,IAAI,KAAK;AACrC,YAAM,UAAU,CAAC,SAAS,KAAK,IAAI,KAAK;AACxC,YAAM,UAAU,SAAS,KAAK,IAAI,KAAK;AACvC,YAAM,OAAOA,SAAQ,MAAM,IAAI,EAC7B,cAAc,OAAO,QAAQ,OAAO,MAAM,EAC1C,cAAc,OAAO,SAAS,SAAS,OAAO,SAAS,OAAO,EAC9D,cAAc,OAAO,SAAS,OAAO,OAAO,EAC5C,eAAe;AACjB,aAAO;AAAA,IACR;AACA,UAAM,UAAUA,SAAQ,UAAU,MAAM,KAAK,MAAM,EAAE,EACnD,iBAAiB,MAAM,EAAE,EACzB,cAAc,WAAW,MAAM,KAAK,MAAM,KAAK,MAAM,EAAE,EACvD,iBAAiB,MAAM,EAAE,EACzB,cAAc,CAAC,WAAW,MAAM,KAAK,MAAM,KAAK,MAAM,EAAE,EACxD,iBAAiB,MAAM,EAAE,EACzB,cAAc,CAAC,UAAU,MAAM,KAAK,MAAM,EAAE,EAC5C,iBAAiB,MAAM,EAAE,EACzB,eAAe;AACjB,YAAQ,QAAQ,QAAQ,CAAC,CAAC;AAC1B,YAAQ,UAAU,YAAY,CAAC,CAAC;AAChC,YAAQ,UAAU,YAAY,EAAE,CAAC;AAGjC,YAAQ,UAAU,QAAQ,OAAO,MAAM,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,CAAC,CAAC;AACrE,YAAQ;AAAA,MACP,QAAQ,OAAO,MAAM,KAAK,IAAI,MAAM,IAAI,CAAC,QAAQ,GAAG,QAAQ,KAAK,MAAM,IAAI,CAAC;AAAA,IAC7E;AACA,eAAW,QAAQ,SAAS;AAC3B,cAAQ;AAAA,QACP,QAAQ,MAAM,IAAI,MAAM,KAAK,WAAW,cAAc,MAAM,QAAQ,UAAU,CAAC;AAAA,MAChF;AAAA,IACD;AACA,YAAQ,UAAU,QAAQ,QAAQ,IAAI,IAAI,UAAU,UAAU,UAAU,CAAC;AACzE,YAAQ,UAAU,QAAQ,QAAQ,IAAI,QAAQ,WAAW,WAAW,UAAU,CAAC;AAC/E,YAAQ,UAAU,QAAQ,IAAI,IAAI,QAAQ,CAAC,UAAU,UAAU,SAAS,CAAC;AACzE,YAAQ,UAAU,QAAQ,IAAI,QAAQ,QAAQ,CAAC,WAAW,WAAW,SAAS,CAAC;AAC/E,YAAQ,UAAU,OAAO;AAEzB,UAAM,UAAUA,SAAQ,UAAU,QAAQ,QAAQ,EAChD,cAAc,cAAc,QAAQ,MAAM,KAAK,YAAY,EAC3D,cAAc,cAAc,QAAQ,MAAM,KAAK,YAAY,EAC3D,UAAU,CAAC,cAAc,QAAQ,MAAM,KAAK,YAAY,EACxD,UAAU,IAAI,OAAO,KAAK,EAC1B,cAAc,CAAC,cAAc,QAAQ,MAAM,KAAK,YAAY,EAC5D,cAAc,CAAC,UAAU,QAAQ,QAAQ,EACzC,YAAY,IAAI,OAAO,KAAK;AAC9B,YAAQ,QAAQC,eAAc,GAAG,OAAO,EAAE,CAAC;AAC3C,YAAQ,QAAQA,eAAc,GAAG,OAAO,KAAK,MAAM,EAAE,CAAC;AACtD,YAAQ,UAAU,YAAY,CAAC,CAAC;AAChC,YAAQ,UAAU,YAAY,EAAE,CAAC;AACjC,YAAQ,UAAU,OAAO;AACzB,YAAQ,UAAUA,eAAc,GAAG,QAAQ,MAAM,IAAI,EAAE,CAAC;AACxD,YAAQ,UAAU,QAAQ,IAAI,IAAI,QAAQ,CAAC,IAAI,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC;AACtE,YAAQ,UAAU,QAAQ,IAAI,QAAQ,QAAQ,CAAC,QAAQ,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC;AAC9E,YAAQ,UAAU,OAAO;AAEzB,kBAAc,QAAQA,eAAc,GAAG,OAAO,KAAK,MAAM,EAAE,CAAC;AAC5D,kBAAc,UAAUA,eAAc,GAAG,OAAO,EAAE,CAAC;AACnD,kBAAc,UAAU,OAAO;AAE/B,YAAQ,QAAQA,eAAc,GAAG,GAAG,EAAE,CAAC;AACvC,YAAQ,QAAQA,eAAc,GAAG,GAAG,EAAE,CAAC;AACvC,UAAM,OAAO,KAAK,MAAM;AACxB,UAAM,OAAQ,IAAI,KAAK,KAAM,MAAM;AACnC,aAAS,IAAI,GAAG,IAAI,MAAM,IAAI,KAAK;AAClC,YAAM,OAAO,OAAO,KAAK,IAAI,IAAI,IAAI;AACrC,YAAM,OAAO,OAAO,KAAK,IAAI,IAAI,IAAI;AACrC,cAAQ,QAAQA,eAAc,MAAM,MAAM,EAAE,CAAC;AAAA,IAC9C;AACA,YAAQ,UAAUA,eAAc,GAAG,GAAG,KAAK,MAAM,EAAE,CAAC;AACpD,YAAQ,UAAUA,eAAc,GAAG,GAAG,EAAE,CAAC;AACzC,YAAQ,UAAU,QAAQ,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;AAC9D,YAAQ,UAAU,QAAQ,MAAM,KAAK,IAAI,MAAM,IAAI,OAAO,CAAC,KAAK,MAAM,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;AACxF,eAAW,QAAQ,SAAS;AAC3B,cAAQ,UAAU,QAAQ,IAAI,UAAU,MAAM,IAAI,CAAC,UAAU,MAAM,CAAC,CAAC;AACrE,cAAQ,UAAU,QAAQ,IAAI,cAAc,MAAM,IAAI,CAAC,cAAc,MAAM,CAAC,CAAC;AAC7E,cAAQ,UAAU,QAAQ,IAAI,cAAc,MAAM,IAAI,CAAC,cAAc,MAAM,CAAC,CAAC;AAAA,IAC9E;AACA,YAAQ,UAAU,QAAQ,IAAI,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,KAAK,KAAK,IAAI,SAAS,GAAG,CAAC,CAAC;AACtF,YAAQ;AAAA,MACP,QAAQ,IAAI,QAAQ,QAAQ,CAAC,QAAQ,KAAK,MAAM,KAAK,KAAK,IAAI,SAAS,GAAG,CAAC;AAAA,IAC5E;AACA,YAAQ;AAAA,MACP,QAAQ,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,MAAM,KAAK,KAAK,IAAI,SAAS,IAAI,QAAQ,CAAC;AAAA,IAC9E;AACA,YAAQ;AAAA,MACP,QAAQ,IAAI,QAAQ,QAAQ,CAAC,QAAQ,CAAC,KAAK,MAAM,KAAK,KAAK,IAAI,SAAS,IAAI,QAAQ,CAAC;AAAA,IACtF;AAEA,YAAQ,QAAQ,OAAO;AACvB,YAAQ,UAAUA,eAAc,GAAG,OAAO,EAAE,CAAC;AAC7C,YAAQ,UAAUA,eAAc,GAAG,OAAO,KAAK,MAAM,EAAE,CAAC;AACxD,YAAQ,UAAUA,eAAc,GAAG,QAAQ,MAAM,IAAI,EAAE,CAAC;AAExD,YAAQ,QAAQA,eAAc,GAAG,GAAG,EAAE,CAAC;AACvC,YAAQ,QAAQA,eAAc,GAAG,GAAG,MAAM,CAAC;AAE3C,kBAAc,UAAUA,eAAc,GAAG,GAAG,EAAE,CAAC;AAC/C,kBAAc,QAAQA,eAAc,GAAG,GAAG,MAAM,CAAC;AAEjD,YAAQ,QAAQ,OAAO;AACvB,YAAQ,UAAU,YAAY,CAAC,CAAC;AAChC,YAAQ,UAAU,YAAY,EAAE,CAAC;AACjC,YAAQ,UAAU,QAAQ,OAAO,MAAM,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,CAAC,CAAC;AACrE,YAAQ;AAAA,MACP,QAAQ,OAAO,MAAM,KAAK,IAAI,MAAM,IAAI,CAAC,QAAQ,GAAG,QAAQ,KAAK,MAAM,IAAI,CAAC;AAAA,IAC7E;AACA,eAAW,QAAQ,SAAS;AAC3B,cAAQ;AAAA,QACP,QAAQ,MAAM,IAAI,MAAM,KAAK,WAAW,cAAc,MAAM,QAAQ,UAAU,CAAC;AAAA,MAChF;AAAA,IACD;AACA,YAAQ,UAAU,QAAQ,QAAQ,IAAI,IAAI,UAAU,UAAU,UAAU,CAAC;AACzE,YAAQ,UAAU,QAAQ,QAAQ,IAAI,QAAQ,WAAW,WAAW,UAAU,CAAC;AAC/E,YAAQ,UAAU,QAAQ,IAAI,IAAI,QAAQ,CAAC,UAAU,UAAU,SAAS,CAAC;AACzE,YAAQ,UAAU,QAAQ,IAAI,QAAQ,QAAQ,CAAC,WAAW,WAAW,SAAS,CAAC;AAE/E,WAAO,MAAM;AAAA,MACZ,UAAU;AAAA,MACV,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,UAAU;AAAA,IACX;AACA,UAAM,aAAa,OAAO;AAC1B,UAAM,aAAa,QAAQ,IAAI,CAAC,MAAM,QAAQ;AAC7C,YAAM,QAAkB;AAAA,QACvB,SAAS,UAAU,UAAU,SAAS,GAAG;AAAA,QACzC,MAAM,GAAG,UAAU;AAAA,QACnB,eAAeM,UAAS;AAAA,QACxB,QAAQ,MAAM;AAAA,QACd,QAAQ,CAAC,KAAK,KAAK,GAAG,GAAG,CAAC;AAAA,QAC1B,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;AAAA,MACxB;AACA,aAAO;AAAA,IACR,CAAC;AACD,WAAO,MAAM;AAAA,MACZ,UAAU;AAAA,QACT;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeA,UAAS;AAAA,UACxB,QAAQ,CAAC,GAAG,GAAG,CAAC;AAAA,UAChB,WAAW,CAAC,GAAG,GAAG,CAAC;AAAA,QACpB;AAAA,QACA;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeA,UAAS;AAAA,UACxB,QAAQ;AAAA,UACR,QAAQ,CAAC,KAAK,KAAK,GAAG,GAAG,CAAC;AAAA,UAC1B,WAAW,CAAC,GAAG,QAAQ,GAAG,CAAC;AAAA,QAC5B;AAAA,QACA;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeA,UAAS;AAAA,UACxB,QAAQ;AAAA,UACR,QAAQ,CAAC,KAAK,KAAK,GAAG,GAAG,CAAC;AAAA,UAC1B,WAAW,CAAC,GAAG,QAAQ,GAAG,CAAC;AAAA,QAC5B;AAAA,QACA;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeA,UAAS;AAAA,UACxB,QAAQ,MAAM;AAAA,UACd,QAAQ,CAAC,GAAG,GAAG,CAAC;AAAA,UAChB,WAAW,CAAC,GAAG,GAAG,MAAM,KAAK,MAAM,KAAK,MAAM,EAAE;AAAA,QACjD;AAAA,QACA;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeA,UAAS;AAAA,UACxB,QAAQ;AAAA,UACR,QAAQ,CAAC,CAAC,WAAW,GAAG,CAAC;AAAA,UACzB,WAAW,CAAC,GAAG,WAAW,SAAS;AAAA,QACpC;AAAA,QACA;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeA,UAAS;AAAA,UACxB,QAAQ;AAAA,UACR,QAAQ,CAAC,WAAW,GAAG,CAAC;AAAA,UACxB,WAAW,CAAC,GAAG,CAAC,WAAW,SAAS;AAAA,QACrC;AAAA,QACA;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeA,UAAS;AAAA,UACxB,QAAQ;AAAA,UACR,QAAQ,CAAC,CAAC,WAAW,GAAG,CAAC;AAAA,UACzB,WAAW,CAAC,GAAG,WAAW,SAAS;AAAA,QACpC;AAAA,QACA;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeA,UAAS;AAAA,UACxB,QAAQ;AAAA,UACR,QAAQ,CAAC,WAAW,GAAG,CAAC;AAAA,UACxB,WAAW,CAAC,GAAG,CAAC,WAAW,SAAS;AAAA,QACrC;AAAA,QACA;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeA,UAAS;AAAA,UACxB,QAAQ,MAAM;AAAA,UACd,QAAQ,CAAC,KAAK,KAAK,GAAG,GAAG,KAAK,KAAK,CAAC;AAAA,UACpC,WAAW,CAAC,GAAG,GAAG,CAAC;AAAA,QACpB;AAAA,QACA,GAAG;AAAA,MACJ;AAAA,MACA,SAAS;AAAA,QACR;AAAA,UACC,SAAS,QAAQ,UAAU;AAAA,UAC3B,YAAYC,UAAS;AAAA,UACrB,QAAQ;AAAA,YACP,UAAU,UAAU;AAAA,YACpB,UAAU,UAAU;AAAA,YACpB,UAAU,UAAU;AAAA,YACpB,UAAU,UAAU;AAAA,YACpB,UAAU,UAAU;AAAA,YACpB,UAAU,UAAU;AAAA,YACpB,UAAU,UAAU;AAAA,YACpB,UAAU,UAAU;AAAA,YACpB,UAAU,UAAU;AAAA,UACrB;AAAA,QACD;AAAA,QACA;AAAA,UACC,SAAS,QAAQ,UAAU;AAAA,UAC3B,YAAYA,UAAS;AAAA,UACrB,QAAQ;AAAA,YACP,UAAU,UAAU;AAAA,YACpB,UAAU,UAAU;AAAA,YACpB,UAAU,UAAU;AAAA,YACpB,UAAU,UAAU;AAAA,UACrB;AAAA,QACD;AAAA,QACA;AAAA,UACC,SAAS,OAAO,UAAU;AAAA,UAC1B,YAAYA,UAAS;AAAA,UACrB,QAAQ,CAAC,QAAQ,UAAU,SAAS,QAAQ,UAAU,SAAS;AAAA,QAChE;AAAA,MACD;AAAA,IACD;AAEA,WAAO,MAAM,CAAC;AAEd,WAAO,UAAU;AACjB,WAAO,UAAU;AAAA,EAClB,SAAS,MAAM;AACd,WAAO,UAAU;AACjB,YAAQ,IAAI,IAAc;AAAA,EAC3B;AACA,SAAO;AACR;AAEA,IAAM,UAAoB;AAAA,EACzB,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,MAAMC;AAAA,EACN,OAAOC;AACR;;;ACvdA;AAAA,EACC,WAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,UAAAC;AAAA,EAEA,YAAAC;AAAA,EACA,QAAAC;AAAA,EACA,WAAAC;AAAA,EAGA,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,YAAAC;AAAA,OACM;AAEP,IAAMC,QAAkB;AAAA,EACvB,UAAU;AAAA,EACV,QAAQ;AAAA;AAAA,IAEPJ,SAAQ,MAAM,MAAM,KAAK,IAAI,KAAK,CAAC;AAAA,IACnCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAK,IAAI,KAAK,CAAC;AAAA,IACnCA,SAAQ,MAAM,MAAM,KAAM,KAAK,KAAM,EAAE;AAAA,IACvCA,SAAQ,MAAM,MAAM,KAAM,KAAK,KAAM,EAAE;AAAA,IACvCA,SAAQ,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC;AAAA,IACjCA,SAAQ,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC;AAAA,IAC/BA,SAAQ,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC;AAAA,IACjCA,SAAQ,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC;AAAA,IAC/BA,SAAQ,MAAM,MAAM,KAAK,GAAG,KAAK,EAAE;AAAA,IACnCA,SAAQ,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC;AAAA,EAC9B;AAAA,EACA,UAAU;AAAA,IACT,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACL;AAAA,EACA,KAAK;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA;AAAA,EACV;AACD;AAKA,SAASK,OAAM,GAAW,OAAyB;AAClD,MAAI;AACJ,MAAI;AACJ,QAAM,SAASJ,UAASG,MAAK,QAAQ;AACrC,QAAM,UAAUP,QAAO;AACvB,QAAM,UAAUA,QAAO;AACvB,QAAM,UAAUA,QAAO;AACvB,SAAO,UAAU,GAAG,OAAO,QAAQ,aAAa,CAAC;AAAA;AACjD,MAAI;AACH,UAAM,KAAK,MAAM,KAAK;AACtB,QAAI,MAAM,KAAK,MAAM,IAAI;AACxB,YAAM,cAAc,MAAM,EAAE,oBAAoB,MAAM,EAAE;AAAA,IACzD;AACA,UAAM,QAAQ,MAAM,KAAK;AACzB,UAAM,YAAY,KAAK,KAAK,MAAM,IAAI,SAAS,CAAC;AAChD,UAAM,QAAQ,MAAM,KAAK,MAAM,KAAK,KAAK,KAAK,CAAC;AAC/C,UAAM,QAAQ,MAAM,KAAK,MAAM,KAAK,KAAK,KAAK,CAAC;AAC/C,UAAM,QAAQ,MAAM,KAAK;AACzB,QAAI,QAAQ,MAAM,IAAI;AACrB,YAAM,cAAc,MAAM,EAAE,4BAA4B,MAAM,EAAE;AAAA,IACjE;AACA,UAAM,SAAS,QAAQ,KAAK,IAAI,KAAK,KAAK,CAAC;AAC3C,UAAM,SAAS,QAAQ,KAAK,IAAI,KAAK,KAAK,CAAC;AAC3C,UAAM,MAAM,MAAM,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC;AAC3C,UAAM,MAAM,MAAM,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC;AAC3C,UAAM,SAAS,MAAM,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC;AAC9C,QAAI,KAAK,MAAM,IAAI;AAClB,YAAM,cAAc,MAAM,EAAE,4BAA4B,MAAM,EAAE;AAAA,IACjE;AACA,QAAI,MAAM,KAAK,MAAM,IAAI;AACxB,YAAM,cAAc,MAAM,EAAE,oBAAoB,MAAM,EAAE;AAAA,IACzD;AACA,QAAI,MAAM,KAAK,IAAI,MAAM,IAAI;AAC5B,YAAM,cAAc,MAAM,EAAE,4BAA4B,MAAM,EAAE;AAAA,IACjE;AACA,UAAM,WAAY,MAAM,KAAK,MAAM,MAAM,IAAK,KAAK,IAAI,KAAK,KAAK,CAAC;AAClE,UAAM,UAAU,QAAQ,SAAS;AACjC,UAAM,UAAU,CAAC,MAAM,KAAK,SAAS;AACrC,UAAM,WAAW,UAAU,MAAM,KAAK,KAAK,KAAK,CAAC;AACjD,QAAI,MAAM,KAAK,MAAM,KAAK,MAAM,IAAI;AACnC,YAAM,cAAc,MAAM,EAAE,4BAA4B,MAAM,EAAE,WAAW,MAAM,EAAE;AAAA,IACpF;AACA,QAAI,UAAU;AACd,QAAI,MAAM,KAAK,GAAG;AACjB,iBAAW,MAAM,KAAK,MAAM,OAAO,MAAM,KAAK;AAAA,IAC/C;AACA,UAAM,SAAS,CAAC,GAAG,MAAM,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,IAAI,OAAO;AACjE,gBAAY,SAAU,IAAY,IAAY,IAAsB;AACnE,YAAM,OAAOF,SAAQ,IAAI,EAAE,EACzB,cAAc,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC,GAAG,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC,CAAC,EAC9E,cAAc,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC,CAAC,EACrD,cAAc,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC,GAAG,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC,CAAC,EAC9E,eAAe;AACjB,aAAO;AAAA,IACR;AACA,cAAU,SAAU,OAAe,QAAgB,MAAc,MAAwB;AACxF,YAAM,OAAOA,SAAQ,MAAM,IAAI,EAC7B,cAAc,OAAO,OAAO,IAAI,EAChC,cAAc,OAAO,OAAO,OAAO,MAAM,EACzC,cAAc,MAAM,OAAO,MAAM,EACjC,eAAe;AACjB,aAAO;AAAA,IACR;AACA,UAAM,WAAY,KAAK,IAAK,IAAI,KAAK,KAAK,IAAKS,MAAK,IAAI,IAAI,IAAI,KAAK,KAAM;AAC3E,WAAO,UAAU,qBAAqB,MAAM,EAAE;AAAA;AAC9C,WAAO,UAAU,yBAAyBL,MAAKD,UAAS,QAAQ,CAAC,CAAC;AAAA;AAElE,UAAM,SAASH,SAAQ,OAAO,CAAC,SAAS,EACtC,iBAAiB,MAAM,EAAE,EACzB,cAAc,OAAO,CAAC,MAAM,EAAE,EAC9B,iBAAiB,MAAM,EAAE,EACzB,cAAc,OAAO,CAAC,MAAM,EAAE,EAC9B,iBAAiB,MAAM,KAAK,MAAM,EAAE,EACpC,cAAc,QAAQ,QAAQ,CAAC,MAAM,KAAK,MAAM,EAChD,cAAc,QAAQ,SAAS,KAAK,CAAC,MAAM,KAAK,SAAS,GAAG,EAC5D,cAAc,QAAQ,QAAQ,CAAC,MAAM,KAAK,MAAM,EAAE,EAClD,iBAAiB,MAAM,EAAE,EACzB,cAAc,CAAC,QAAQ,QAAQ,CAAC,MAAM,KAAK,MAAM,EAAE,EACnD,iBAAiB,MAAM,EAAE,EACzB,cAAc,CAAC,QAAQ,SAAS,KAAK,CAAC,MAAM,KAAK,SAAS,GAAG,EAC7D,cAAc,CAAC,QAAQ,QAAQ,CAAC,MAAM,KAAK,MAAM,EACjD,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,EAC/B,iBAAiB,MAAM,KAAK,MAAM,EAAE,EACpC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,EAC/B,iBAAiB,MAAM,EAAE,EACzB,cAAc,CAAC,OAAO,CAAC,SAAS,EAChC,iBAAiB,MAAM,EAAE,EACzB,YAAY,IAAI,MAAM,KAAK;AAC7B,YAAQ,QAAQ,MAAM;AACtB,YAAQ,QAAQC,eAAc,GAAG,GAAG,KAAK,MAAM,EAAE,CAAC;AAClD,YAAQ,UAAU,UAAU,SAAS,SAAS,MAAM,EAAE,CAAC;AACvD,YAAQ,UAAU,UAAU,SAAS,UAAU,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;AACvE,YAAQ,UAAU,UAAU,CAAC,SAAS,SAAS,MAAM,EAAE,CAAC;AACxD,YAAQ,UAAU,UAAU,CAAC,SAAS,UAAU,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;AAExE,YAAQ,QAAQA,eAAc,GAAG,GAAG,EAAE,CAAC;AACvC,YAAQ,QAAQA,eAAc,GAAG,GAAG,KAAK,MAAM,EAAE,CAAC;AAClD,YAAQ,QAAQ,UAAU,SAAS,SAAS,MAAM,EAAE,CAAC;AACrD,YAAQ,QAAQ,UAAU,SAAS,UAAU,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;AACrE,YAAQ,QAAQ,UAAU,CAAC,SAAS,SAAS,MAAM,EAAE,CAAC;AACtD,YAAQ,QAAQ,UAAU,CAAC,SAAS,UAAU,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;AACtE,YAAQ,UAAU,MAAM;AAExB,YAAQ,UAAU,QAAQ,MAAM,IAAI,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC;AAC/D,YAAQ,UAAU,QAAQ,MAAM,IAAI,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;AACtE,eAAW,QAAQ,QAAQ;AAC1B,cAAQ,UAAU,QAAQ,MAAM,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;AAAA,IAC/D;AAEA,WAAO,MAAM;AAAA,MACZ,UAAU,QAAQ,OAAO,GAAG,GAAG,QAAQ;AAAA,MACvC,UAAU,QAAQ,OAAO,GAAG,GAAG,QAAQ;AAAA,MACvC,UAAU;AAAA,IACX;AACA,UAAM,aAAa,OAAO;AAC1B,UAAM,aAAa,OAAO,IAAI,CAAC,MAAM,QAAQ;AAC5C,YAAM,QAAkB;AAAA,QACvB,SAAS,UAAU,UAAU,QAAQ,GAAG;AAAA,QACxC,MAAM,GAAG,UAAU;AAAA,QACnB,eAAeM,UAAS;AAAA,QACxB,QAAQ,MAAM;AAAA,QACd,QAAQ,CAAC,GAAG,GAAG,CAAC;AAAA,QAChB,WAAW,CAAC,GAAG,GAAG,IAAI;AAAA,MACvB;AACA,aAAO;AAAA,IACR,CAAC;AACD,UAAM,UAAU,OAAO,IAAI,CAAC,MAAM,QAAQ;AACzC,YAAM,UAAU,UAAU,UAAU,QAAQ,GAAG;AAC/C,aAAO;AAAA,IACR,CAAC;AACD,WAAO,MAAM;AAAA,MACZ,UAAU;AAAA,QACT;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeA,UAAS;AAAA,UACxB,QAAQ,MAAM;AAAA,UACd,QAAQ,CAAC,GAAG,GAAG,CAAC;AAAA,UAChB,WAAW,CAAC,GAAG,GAAG,CAAC;AAAA,QACpB;AAAA,QACA,GAAG;AAAA,MACJ;AAAA,MACA,SAAS;AAAA,QACR;AAAA,UACC,SAAS,OAAO,UAAU;AAAA,UAC1B,YAAYC,UAAS;AAAA,UACrB,QAAQ,CAAC,UAAU,UAAU,SAAS,GAAG,OAAO;AAAA,QACjD;AAAA,MACD;AAAA,IACD;AAEA,WAAO,MAAM,CAAC;AAEd,WAAO,UAAU;AACjB,WAAO,UAAU;AAAA,EAClB,SAAS,MAAM;AACd,WAAO,UAAU;AACjB,YAAQ,IAAI,IAAc;AAAA,EAC3B;AACA,SAAO;AACR;AAEA,IAAM,YAAsB;AAAA,EAC3B,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,MAAMC;AAAA,EACN,OAAOC;AACR;;;AChOA;AAAA,EACC,WAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,UAAAC;AAAA,EAGA,QAAAC;AAAA,EACA,WAAAC;AAAA,EAGA,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,YAAAC;AAAA,OACM;AAEP,IAAMC,QAAkB;AAAA,EACvB,UAAU;AAAA,EACV,QAAQ;AAAA;AAAA,IAEPJ,SAAQ,MAAM,MAAM,OAAO,KAAM,KAAO,EAAE;AAAA,IAC1CA,SAAQ,MAAM,MAAM,KAAM,KAAM,KAAO,EAAE;AAAA,IACzCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAM,KAAK,KAAO,EAAE;AAAA,IACxCA,SAAQ,MAAM,MAAM,KAAM,KAAK,KAAO,EAAE;AAAA,IACxCA,SAAQ,MAAM,MAAM,KAAK,IAAI,KAAM,CAAC;AAAA,IACpCA,SAAQ,MAAM,MAAM,KAAK,IAAI,KAAK,CAAC;AAAA,IACnCA,SAAQ,MAAM,MAAM,KAAK,IAAI,KAAK,CAAC;AAAA,IACnCA,SAAQ,MAAM,MAAM,KAAK,IAAI,KAAK,CAAC;AAAA,IACnCA,SAAQ,MAAM,MAAM,KAAK,IAAI,KAAK,CAAC;AAAA,IACnCA,SAAQ,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC;AAAA,IAC/BA,SAAQ,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC;AAAA,IAC/BA,SAAQ,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC;AAAA,IAC/BA,SAAQ,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC;AAAA,IAChCA,SAAQ,QAAQ,MAAM,MAAM,KAAK,KAAM,EAAE;AAAA,IACzCA,SAAQ,QAAQ,MAAM,KAAK,IAAI,KAAM,EAAE;AAAA,IACvCA,SAAQ,QAAQ,MAAM,KAAK,IAAI,KAAK,EAAE;AAAA,EACvC;AAAA,EACA,UAAU;AAAA,IACT,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,EACP;AAAA,EACA,KAAK;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA;AAAA,EACV;AACD;AAKA,SAASK,OAAM,GAAW,OAAyB;AAClD,MAAI;AACJ,MAAI;AACJ,QAAM,SAASJ,UAASG,MAAK,QAAQ;AACrC,QAAM,UAAUN,QAAO;AACvB,QAAM,UAAUA,QAAO;AACvB,QAAM,SAASA,QAAO;AACtB,QAAM,gBAAgBA,QAAO;AAC7B,SAAO,UAAU,GAAG,OAAO,QAAQ,aAAa,CAAC;AAAA;AACjD,MAAI;AACH,UAAM,KAAK,MAAM,KAAK;AACtB,WAAO,UAAU,kBAAkBC,MAAK,MAAM,EAAE,CAAC,SAASA,MAAK,MAAM,EAAE,CAAC;AAAA;AACxE,mBAAe,SAAU,IAAY,IAAY,IAAY,IAAsB;AAClF,YAAM,QAAQH,SAAQ,IAAI,EAAE,EAC1B,cAAc,KAAK,IAAI,EAAE,EACzB,cAAc,KAAK,IAAI,KAAK,EAAE,EAC9B,cAAc,IAAI,KAAK,EAAE,EACzB,eAAe;AACjB,aAAO;AAAA,IACR;AACA,mBAAe,SACd,IACA,IACA,IACA,IACA,OACW;AACX,YAAM,QAAQA,SAAQ,IAAI,EAAE,EAC1B,iBAAiB,KAAK,EACtB,cAAc,KAAK,IAAI,EAAE,EACzB,iBAAiB,KAAK,EACtB,cAAc,KAAK,IAAI,KAAK,EAAE,EAC9B,iBAAiB,KAAK,EACtB,cAAc,IAAI,KAAK,EAAE,EACzB,iBAAiB,KAAK,EACtB,eAAe;AACjB,aAAO;AAAA,IACR;AAEA,YAAQ,QAAQC,eAAc,GAAG,GAAG,EAAE,CAAC;AACvC,YAAQ,QAAQA,eAAc,GAAG,GAAG,KAAK,MAAM,EAAE,CAAC;AAClD,UAAM,SAAS,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,MAAM,IAAI,MAAM,KAAK,IAAI,MAAM,EAAE;AACtF,eAAW,MAAM,QAAQ;AACxB,cAAQ,QAAQ,aAAa,IAAI,KAAK,MAAM,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;AACnE,cAAQ;AAAA,QACP;AAAA,UACC,KAAK,MAAM;AAAA,UACX,KAAK,MAAM,KAAK,MAAM;AAAA,UACtB,MAAM,KAAK,IAAI,MAAM;AAAA,UACrB,MAAM,KAAK,IAAI,MAAM;AAAA,QACtB;AAAA,MACD;AAAA,IACD;AACA,YAAQ,UAAU,aAAa,CAAC,MAAM,KAAK,GAAG,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;AAErE,UAAM,SAAmB,CAAC;AAC1B,WAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,WAAO,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AACnC,eAAW,MAAM;AAAA,MAChB,CAAC,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,MAAM;AAAA,MACrC,CAAC,MAAM,KAAK,IAAI,MAAM;AAAA,MACtB,MAAM,KAAK;AAAA,MACX,MAAM,KAAK,IAAI,MAAM,KAAK,MAAM;AAAA,IACjC,GAAG;AACF,iBAAW,OAAO,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,GAAG;AAC3C,eAAO,KAAK,KAAK,GAAG;AAAA,MACrB;AAAA,IACD;AACA,eAAW,MAAM,QAAQ;AACxB,cAAQ,QAAQ,aAAa,IAAI,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;AACxD,cAAQ;AAAA,QACP;AAAA,UACC,KAAK,MAAM;AAAA,UACX,KAAK,MAAM;AAAA,UACX,MAAM,KAAK,IAAI,MAAM;AAAA,UACrB,MAAM,KAAK,IAAI,MAAM;AAAA,QACtB;AAAA,MACD;AAAA,IACD;AACA,YAAQ,UAAU,aAAa,CAAC,MAAM,KAAK,GAAG,CAAC,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;AACtE,YAAQ,UAAU,aAAa,CAAC,MAAM,KAAK,GAAG,KAAK,MAAM,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;AAEhF,eAAW,MAAM,QAAQ;AACxB,aAAO,UAAU,aAAa,IAAI,CAAC,MAAM,KAAK,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC;AAAA,IACrE;AACA,eAAW,MAAM,QAAQ;AACxB,aAAO,UAAU,aAAa,CAAC,MAAM,KAAK,GAAG,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;AAAA,IACrE;AACA,WAAO,UAAU,aAAa,CAAC,MAAM,KAAK,GAAG,CAAC,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;AAErE,eAAW,MAAM,QAAQ;AACxB,oBAAc,QAAQ,aAAa,IAAI,CAAC,MAAM,KAAK,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC;AAAA,IAC1E;AACA,eAAW,MAAM,QAAQ;AACxB,oBAAc,QAAQ,aAAa,CAAC,MAAM,KAAK,GAAG,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;AAAA,IAC1E;AACA,kBAAc,QAAQ,aAAa,CAAC,MAAM,KAAK,GAAG,CAAC,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;AAC1E,UAAM,SAAS,GAAG,MAAM,OAAO,KAAK,MAAM,OAAO,MAAM,QAAQ;AAC/D,UAAM,aAAa,MAAM,OAAO,MAAM,QAAQ;AAC9C,UAAM,YAAY,MAAM,OAAO;AAC/B,UAAM,YAAY,MAAM,MAAM;AAC9B,UAAM,aAAa,YAAY,cAAc,IAAI;AACjD,UAAM,SAAS,CAAC,YAAY;AAC5B,aAAS,IAAI,GAAG,IAAI,MAAM,MAAM,KAAK;AACpC,YAAM,KAAK,SAAS,IAAI,MAAM;AAC9B,oBAAc,UAAU,aAAa,KAAK,WAAW,QAAQ,MAAM,MAAM,SAAS,CAAC;AACnF,eAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC3B,sBAAc;AAAA,UACb,aAAa,IAAI,SAAS,IAAI,WAAW,MAAM,MAAM,WAAW,YAAY,CAAC;AAAA,QAC9E;AAAA,MACD;AAAA,IACD;AAEA,WAAO,MAAM;AAAA,MACZ,UAAU;AAAA,MACV,UAAU;AAAA,MACV,SAAS;AAAA,MACT,iBAAiB;AAAA,IAClB;AACA,UAAM,aAAa,OAAO;AAC1B,WAAO,MAAM;AAAA,MACZ,UAAU;AAAA,QACT;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeK,UAAS;AAAA,UACxB,QAAQ,MAAM;AAAA,UACd,QAAQ,CAAC,GAAG,GAAG,CAAC;AAAA,UAChB,WAAW,CAAC,GAAG,GAAG,CAAC,MAAM,KAAK,CAAC;AAAA,QAChC;AAAA,QACA;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeA,UAAS;AAAA,UACxB,QAAQ,MAAM;AAAA,UACd,QAAQ,CAAC,GAAG,KAAK,KAAK,GAAG,CAAC;AAAA,UAC1B,WAAW,CAAC,CAAC,MAAM,KAAK,GAAG,GAAG,CAAC;AAAA,QAChC;AAAA,MACD;AAAA,MACA,SAAS;AAAA,QACR;AAAA,UACC,SAAS,OAAO,UAAU;AAAA,UAC1B,YAAYC,UAAS;AAAA,UACrB,QAAQ,CAAC,UAAU,UAAU,SAAS,UAAU,UAAU,OAAO;AAAA,QAClE;AAAA,MACD;AAAA,IACD;AAEA,WAAO,MAAM,CAAC;AAEd,WAAO,UAAU;AACjB,WAAO,UAAU;AAAA,EAClB,SAAS,MAAM;AACd,WAAO,UAAU;AACjB,YAAQ,IAAI,IAAc;AAAA,EAC3B;AACA,SAAO;AACR;AAEA,IAAM,WAAqB;AAAA,EAC1B,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,MAAMC;AAAA,EACN,OAAOC;AACR;;;AJhNA,IAAMC,QAAkB;AAAA,EACvB,UAAU;AAAA,EACV,QAAQ;AAAA;AAAA,IAEPC,SAAQ,MAAM,MAAM,KAAM,KAAK,KAAO,EAAE;AAAA,IACxCA,SAAQ,MAAM,MAAM,MAAM,KAAK,KAAO,EAAE;AAAA,IACxCA,SAAQ,MAAM,MAAM,KAAK,IAAI,KAAK,EAAE;AAAA,IACpCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAM,KAAK,KAAM,EAAE;AAAA,IACvCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAK,IAAI,KAAK,EAAE;AAAA,IACpCA,SAAQ,MAAM,MAAM,KAAM,KAAK,KAAM,EAAE;AAAA,IACvCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAK,IAAI,KAAM,EAAE;AAAA,IACrCA,SAAQ,MAAM,MAAM,KAAK,IAAI,KAAM,EAAE;AAAA,IACrCA,SAAQ,MAAM,MAAM,KAAK,IAAI,KAAK,EAAE;AAAA,IACpCA,SAAQ,MAAM,MAAM,KAAK,IAAI,KAAK,EAAE;AAAA,IACpCA,SAAQ,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC;AAAA,IAChCA,SAAQ,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC;AAAA,IAChCA,SAAQ,MAAM,MAAM,OAAO,KAAM,KAAO,EAAE;AAAA,IAC1CA,SAAQ,MAAM,MAAM,KAAM,KAAM,KAAO,EAAE;AAAA,IACzCA,SAAQ,MAAM,MAAM,KAAK,IAAI,KAAK,EAAE;AAAA,IACpCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAM,KAAK,KAAM,EAAE;AAAA,IACvCA,SAAQ,MAAM,MAAM,KAAM,KAAK,KAAM,EAAE;AAAA,IACvCA,SAAQ,MAAM,MAAM,KAAK,IAAI,KAAM,EAAE;AAAA,IACrCA,SAAQ,MAAM,MAAM,KAAK,IAAI,KAAM,EAAE;AAAA,IACrCA,SAAQ,MAAM,UAAU,IAAI,GAAG,IAAI,CAAC;AAAA,IACpCA,SAAQ,MAAM,UAAU,IAAI,GAAG,IAAI,CAAC;AAAA,EACrC;AAAA,EACA,UAAU;AAAA,IACT,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACL;AAAA,EACA,KAAK;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA;AAAA,EACV;AACD;AAEA,SAASC,OAAM,GAAW,OAAyB;AAClD,QAAM,SAASC,UAASH,MAAK,QAAQ;AACrC,QAAM,UAAUI,QAAO;AACvB,QAAM,UAAUA,QAAO;AACvB,SAAO,UAAU,GAAG,OAAO,QAAQ,aAAa,CAAC;AAAA;AACjD,MAAI;AACH,UAAM,cACL,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM;AACzE,WAAO,UAAU,qBAAqBC,MAAK,WAAW,CAAC,cAAcA,MAAK,MAAM,EAAE,CAAC;AAAA;AACnF,WAAO,UAAU,2BAA2BA,MAAK,MAAM,EAAE,CAAC,WAAWA,MAAK,MAAM,EAAE,CAAC;AAAA;AACnF,UAAM,eAAe,MAAM,KAAK,MAAM,MAAM;AAC5C,UAAM,iBACL,cAAe,KAAK,IAAK,IAAI,KAAK,KAAK,IAAKL,MAAK,IAAI,IAAI,KAAK,MAAM,KAAK,MAAM,MAAO;AACvF,UAAM,WAAWM,UAAS,cAAc;AACxC,WAAO,UAAU,yBAAyBD,MAAKE,UAAS,QAAQ,CAAC,CAAC;AAAA;AAClE,UAAM,WAAW,MAAM,KAAK,MAAM,KAAK,MAAM;AAC7C,UAAM,aAAa,WAAW,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM;AACrE,UAAM,YAAY,aAAa,MAAM;AAErC,UAAM,kBAAkBC,aAAY,cAAc,IAAI;AACtD,UAAM,YAAYA,aAAY,QAAQ,IAAI;AAC1C,UAAM,cAAcA,aAAY,UAAU,IAAI;AAC9C,UAAM,aAAaA,aAAY,SAAS,IAAI;AAC5C,oBAAgB,OAAO,MAAM,MAAM,EAAE;AACrC,oBAAgB,OAAO,MAAM,MAAM,EAAE;AACrC,oBAAgB,OAAO,MAAM,MAAM,EAAE;AACrC,oBAAgB,OAAO,MAAM,MAAM,EAAE;AACrC,oBAAgB,OAAO,MAAM,MAAM,EAAE;AACrC,oBAAgB,OAAO,MAAM,MAAM,EAAE;AACrC,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,KAAK,CAAC;AACnC,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,KAAK,GAAG;AACrC,QAAI,MAAM,KAAK,MAAM,KAAK,IAAI,MAAM,IAAI;AACvC,YAAM,cAAc,MAAM,EAAE,4BAA4B,MAAM,EAAE,WAAW,MAAM,EAAE;AAAA,IACpF;AACA,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,KAAK,MAAM,EAAE;AAC1C,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,QAAI,MAAM,MAAM,MAAM,IAAI;AACzB,YAAM,cAAc,MAAM,EAAE,4BAA4B,MAAM,EAAE;AAAA,IACjE;AACA,UAAM,SAAS,MAAM,KAAK,IAAI,MAAM;AACpC,cAAU,OAAO,MAAM,MAAM;AAC7B,QAAI,UAAU,GAAG;AAChB,YAAM,cAAc,MAAM,EAAE,4BAA4B,MAAM,EAAE;AAAA,IACjE;AACA,cAAU,OAAO,MAAM,MAAM,KAAK,IAAI,MAAM,EAAE;AAC9C,cAAU,OAAO,MAAM,MAAM,KAAK,IAAI,MAAM,EAAE;AAC9C,UAAM,WAAW,MAAM,KAAK;AAC5B,gBAAY,OAAO,MAAM,QAAQ;AACjC,gBAAY,OAAO,MAAM,MAAM,EAAE;AACjC,gBAAY,OAAO,MAAM,MAAM,EAAE;AACjC,gBAAY,OAAO,MAAM,MAAM,EAAE;AACjC,gBAAY,OAAO,MAAM,MAAM,EAAE;AACjC,gBAAY,OAAO,MAAM,MAAM,KAAK,IAAI,MAAM,EAAE;AAChD,eAAW,OAAO,MAAM,MAAM,EAAE;AAChC,eAAW,OAAO,MAAM,MAAM,EAAE;AAChC,eAAW,OAAO,MAAM,MAAM,EAAE;AAChC,eAAW,OAAO,MAAM,MAAM,EAAE;AAChC,QAAI,MAAM,KAAK,IAAI,MAAM,KAAK,IAAI,MAAM,KAAK,MAAM,KAAK,IAAI,MAAM,IAAI;AACrE,YAAM,cAAc,MAAM,EAAE,4BAA4B,MAAM,EAAE,QAAQ,MAAM,EAAE,QAAQ,MAAM,EAAE;AAAA,IACjG;AACA,eAAW,OAAO,MAAM,MAAM,EAAE;AAChC,eAAW,OAAO,MAAM,MAAM,EAAE;AAChC,eAAW,OAAO,MAAM,MAAM,EAAE;AAChC,eAAW,OAAO,MAAM,MAAM,EAAE;AAChC,eAAW,OAAO,MAAM,MAAM,EAAE;AAChC,eAAW,OAAO,MAAM,MAAM,EAAE;AAChC,UAAM,iBAAiB,cAAc,MAAM,GAAG,gBAAgB,YAAY,CAAC;AAC3E,IAAAC,WAAU,cAAc;AACxB,WAAO,UAAUC,WAAU,eAAe,QAAQ,gBAAgB,QAAQ;AAC1E,UAAM,WAAW,QAAQ,MAAM,GAAG,UAAU,YAAY,CAAC;AACzD,IAAAD,WAAU,QAAQ;AAClB,WAAO,UAAUC,WAAU,SAAS,QAAQ,UAAU,QAAQ;AAC9D,UAAM,aAAa,UAAU,MAAM,GAAG,YAAY,YAAY,CAAC;AAC/D,IAAAD,WAAU,UAAU;AACpB,WAAO,UAAUC,WAAU,WAAW,QAAQ,YAAY,QAAQ;AAClE,UAAM,YAAY,SAAS,MAAM,GAAG,WAAW,YAAY,CAAC;AAC5D,IAAAD,WAAU,SAAS;AACnB,WAAO,UAAUC,WAAU,UAAU,QAAQ,WAAW,QAAQ;AAEhE,YAAQ,YAAY,eAAe,IAAI,OAAO;AAC9C,YAAQ,YAAY,SAAS,IAAI,SAAS,UAAU,GAAG,QAAQ,CAAC;AAChE,YAAQ;AAAA,MACP,WAAW,IAAI,SAAS,UAAU,GAAG,UAAU,EAAE,OAAO,GAAG,YAAY,WAAW,CAAC;AAAA,IACpF;AACA,YAAQ;AAAA,MACP,UAAU,IAAI,SAAS,UAAU,GAAG,SAAS,EAAE,OAAO,GAAG,WAAW,QAAQ;AAAA,IAC7E;AAEA,YAAQ,YAAY,eAAe,IAAI,OAAO;AAC9C,YAAQ,YAAY,SAAS,IAAI,SAAS,UAAU,GAAG,QAAQ,CAAC;AAChE,YAAQ,YAAY,WAAW,IAAI,SAAS,UAAU,CAAC,WAAW,GAAG,UAAU,CAAC;AAChF,YAAQ,YAAY,UAAU,IAAI,SAAS,UAAU,GAAG,SAAS,CAAC;AAElE,WAAO,MAAM;AAAA,MACZ,UAAU;AAAA,MACV,UAAU;AAAA,IACX;AACA,UAAM,aAAa,OAAO;AAC1B,WAAO,MAAM;AAAA,MACZ,UAAU;AAAA,QACT;AAAA,UACC,SAAS,SAAS,UAAU;AAAA,UAC5B,WAAW;AAAA,UACX,SAAS;AAAA,UACT,QAAQ,CAAC,GAAG,GAAG,CAAC;AAAA,UAChB,WAAW,CAAC,GAAG,GAAG,CAAC;AAAA,QACpB;AAAA,QACA;AAAA,UACC,SAAS,SAAS,UAAU;AAAA,UAC5B,WAAW;AAAA,UACX,SAAS;AAAA,UACT,QAAQ,CAAC,GAAG,GAAG,CAAC;AAAA,UAChB,WAAW,CAAC,GAAG,GAAG,QAAQ;AAAA,QAC3B;AAAA,QACA;AAAA,UACC,SAAS,SAAS,UAAU;AAAA,UAC5B,WAAW;AAAA,UACX,SAAS;AAAA,UACT,QAAQ,CAAC,KAAK,KAAK,GAAG,GAAG,CAAC;AAAA,UAC1B,WAAW,CAAC,GAAG,GAAG,SAAS;AAAA,QAC5B;AAAA,QACA;AAAA,UACC,SAAS,SAAS,UAAU;AAAA,UAC5B,WAAW;AAAA,UACX,SAAS;AAAA,UACT,QAAQ,CAAC,KAAK,KAAK,GAAG,GAAG,CAAC;AAAA,UAC1B,WAAW,CAAC,GAAG,WAAW,GAAG,UAAU;AAAA,QACxC;AAAA,MACD;AAAA,MACA,UAAU,CAAC;AAAA,MACX,SAAS;AAAA,QACR;AAAA,UACC,SAAS,OAAO,UAAU;AAAA,UAC1B,YAAYC,UAAS;AAAA,UACrB,QAAQ;AAAA,YACP,SAAS,UAAU;AAAA,YACnB,SAAS,UAAU;AAAA,YACnB,SAAS,UAAU;AAAA,YACnB,SAAS,UAAU;AAAA,UACpB;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAEA,UAAM,gBAA0B;AAAA,MAC/B,UAAU,gBAAgB,YAAY;AAAA,MACtC,QAAQ,gBAAgB,mBAAmB;AAAA,MAC3C,aAAa,CAAC,GAAG,GAAG,CAAC;AAAA,MACrB,UAAU,CAAC,GAAG,GAAG,CAAC;AAAA,IACnB;AACA,UAAM,UAAoB;AAAA,MACzB,UAAU,UAAU,YAAY;AAAA,MAChC,QAAQ,UAAU,mBAAmB;AAAA,MACrC,aAAa,CAAC,GAAG,GAAG,CAAC;AAAA,MACrB,UAAU,CAAC,GAAG,GAAG,QAAQ;AAAA,IAC1B;AACA,UAAM,YAAsB;AAAA,MAC3B,UAAU,UAAU,YAAY;AAAA,MAChC,QAAQ,UAAU,mBAAmB;AAAA,MACrC,aAAa,CAAC,KAAK,KAAK,GAAG,GAAG,CAAC;AAAA,MAC/B,UAAU,CAAC,GAAG,WAAW,GAAG,UAAU;AAAA,IACvC;AACA,UAAM,WAAqB;AAAA,MAC1B,UAAU,WAAW,YAAY;AAAA,MACjC,QAAQ,WAAW,mBAAmB;AAAA,MACtC,aAAa,CAAC,KAAK,KAAK,GAAG,GAAG,CAAC;AAAA,MAC/B,UAAU,CAAC,GAAG,GAAG,SAAS;AAAA,IAC3B;AACA,WAAO,MAAM;AAAA,MACZ,eAAe;AAAA,MACf,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,SAAS;AAAA,IACV;AAEA,WAAO,UAAU;AACjB,WAAO,UAAU;AAAA,EAClB,SAAS,MAAM;AACd,WAAO,UAAU;AACjB,YAAQ,IAAI,IAAc;AAAA,EAC3B;AACA,SAAO;AACR;AAEA,IAAM,eAAyB;AAAA,EAC9B,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,MAAMX;AAAA,EACN,OAAOE;AACR;;;AK/SA;AAAA,EACC,eAAAU;AAAA,EACA,aAAAC;AAAA,EACA,aAAAC;AAAA,EAGA,UAAAC;AAAA,EACA,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,QAAAC;AAAA,EACA,WAAAC;AAAA,EAGA,YAAAC;AAAA,EAEA,YAAAC;AAAA,OAEM;;;AChBP;AAAA,EACC,eAAAC;AAAA,EACA,aAAAC;AAAA,EACA,aAAAC;AAAA,EACA,WAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,UAAAC;AAAA,EAEA,YAAAC;AAAA,EACA,QAAAC;AAAA,EACA,WAAAC;AAAA,EAGA,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,YAAAC;AAAA,OACM;AAKP,IAAMC,QAAkB;AAAA,EACvB,UAAU;AAAA,EACV,QAAQ;AAAA;AAAA,IAEPC,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAM,KAAK,KAAM,EAAE;AAAA,IACvCA,SAAQ,MAAM,MAAM,KAAK,GAAG,KAAM,EAAE;AAAA,IACpCA,SAAQ,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC;AAAA,IAChCA,SAAQ,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC;AAAA,IAChCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC;AAAA,IAChCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAK,IAAI,KAAM,EAAE;AAAA,IACrCA,SAAQ,MAAM,MAAM,KAAK,IAAI,KAAM,EAAE;AAAA,IACrCA,SAAQ,MAAM,MAAM,KAAM,KAAK,KAAM,EAAE;AAAA,IACvCA,SAAQ,MAAM,MAAM,KAAM,KAAK,KAAM,EAAE;AAAA,IACvCA,SAAQ,MAAM,MAAM,KAAK,IAAI,KAAK,EAAE;AAAA,IACpCA,SAAQ,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC;AAAA,IAChCA,SAAQ,MAAM,MAAM,KAAK,IAAI,KAAM,CAAC;AAAA,IACpCA,SAAQ,MAAM,MAAM,KAAK,IAAI,KAAM,CAAC;AAAA,IACpCA,SAAQ,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC;AAAA,IAC/BA,SAAQ,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC;AAAA,IACjCA,SAAQ,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC;AAAA,IACjCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAK,IAAI,KAAM,EAAE;AAAA,IACrCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC;AAAA,IACjCA,SAAQ,MAAM,MAAM,KAAK,IAAI,KAAK,CAAC;AAAA,IACnCA,SAAQ,MAAM,MAAM,KAAM,KAAK,KAAM,EAAE;AAAA,IACvCA,SAAQ,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC;AAAA,EAChC;AAAA,EACA,UAAU;AAAA,IACT,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACL;AAAA,EACA,KAAK;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA;AAAA,EACV;AACD;AAIA,SAASC,OAAM,GAAW,OAAyB;AAClD,MAAI;AACJ,QAAM,SAASC,UAASH,MAAK,QAAQ;AACrC,QAAM,UAAUI,QAAO;AACvB,QAAM,UAAUA,QAAO;AACvB,QAAM,gBAAgBA,QAAO;AAC7B,QAAM,UAAUA,QAAO;AACvB,QAAM,UAAUA,QAAO;AACvB,QAAM,UAAUA,QAAO;AACvB,QAAM,gBAAgBA,QAAO;AAC7B,QAAM,UAAUA,QAAO;AACvB,QAAM,gBAAgBA,QAAO;AAC7B,QAAM,iBAAiBA,QAAO;AAC9B,QAAM,kBAAkBA,QAAO;AAC/B,QAAM,kBAAkBA,QAAO;AAC/B,QAAM,mBAAmBA,QAAO;AAChC,QAAM,kBAAkBA,QAAO;AAC/B,QAAM,mBAAmBA,QAAO;AAChC,SAAO,UAAU,GAAG,OAAO,QAAQ,aAAa,CAAC;AAAA;AACjD,MAAI;AACH,UAAM,KAAK,MAAM,KAAK;AACtB,UAAM,OAAO,MAAM,KAAK,MAAM;AAC9B,UAAM,OAAO,OAAO,MAAM,KAAK,MAAM;AACrC,WAAO,UAAU,gBAAgBC,MAAK,IAAI,CAAC;AAAA;AAC3C,WAAO,UAAU,sBAAsBA,MAAK,IAAI,CAAC;AAAA;AACjD,QAAI,IAAI,MAAM,MAAM,MAAM,IAAI;AAC7B,YAAM,cAAc,MAAM,EAAE,4BAA4B,MAAM,EAAE;AAAA,IACjE;AACA,QAAI,MAAM,KAAK,MAAM,KAAK,IAAI,MAAM,IAAI;AACvC,YAAM,cAAc,MAAM,EAAE,4BAA4B,MAAM,EAAE,WAAW,MAAM,EAAE;AAAA,IACpF;AACA,UAAM,YAAY,OAAO,MAAM;AAC/B,QAAI,YAAY,GAAG;AAClB,YAAM,cAAc,MAAM,EAAE,8BAA8BA,MAAK,IAAI,CAAC;AAAA,IACrE;AACA,UAAM,YAAY,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK;AAC9D,UAAM,YAAY,MAAM,KAAK,MAAM,KAAK,MAAM;AAC9C,cAAU,SACT,OACA,QACA,MACA,MACA,OACW;AACX,YAAM,SAAS,QAAQ,KAAK,IAAI,KAAK;AACrC,YAAM,SAAS,QAAQ,KAAK,IAAI,KAAK;AACrC,YAAM,UAAU,CAAC,SAAS,KAAK,IAAI,KAAK;AACxC,YAAM,UAAU,SAAS,KAAK,IAAI,KAAK;AACvC,YAAM,OAAOC,SAAQ,MAAM,IAAI,EAC7B,cAAc,OAAO,QAAQ,OAAO,MAAM,EAC1C,cAAc,OAAO,SAAS,SAAS,OAAO,SAAS,OAAO,EAC9D,cAAc,OAAO,SAAS,OAAO,OAAO,EAC5C,eAAe;AACjB,aAAO;AAAA,IACR;AAEA,UAAM,YAAYC,aAAY,QAAQ,IAAI;AAC1C,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,UAAM,WAAW,QAAQ,MAAM,GAAG,UAAU,YAAY,CAAC;AACzD,IAAAC,WAAU,QAAQ;AAClB,WAAO,UAAUC,WAAU,SAAS,QAAQ,UAAU,QAAQ;AAE9D,YAAQ,YAAY,SAAS,IAAI,QAAQ;AACzC,YAAQ,YAAY,SAAS,IAAI,QAAQ;AACzC,kBAAc,YAAY,SAAS,IAAI,cAAc;AACrD,YAAQ,YAAY,SAAS,IAAI,QAAQ;AACzC,YAAQ,YAAY,SAAS,IAAI,QAAQ;AACzC,YAAQ,YAAY,SAAS,IAAI,QAAQ;AACzC,kBAAc,YAAY,SAAS,IAAI,cAAc;AACrD,YAAQ,YAAY,SAAS,IAAI,QAAQ;AAEzC,kBAAc,YAAY,SAAS,IAAI,UAAU,IAAI;AACrD,UAAM,MAAM,MAAM,KAAK;AACvB,UAAM,MAAM,MAAM,KAAK;AACvB,UAAM,MAAM,MAAM,KAAK,IAAI,MAAM;AACjC,UAAM,OAAO,MAAM;AACnB,kBAAc,QAAQ,QAAQ,MAAM,IAAI,MAAM,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1E,kBAAc,QAAQ,QAAQ,KAAK,MAAM,IAAI,CAAC,KAAK,MAAM,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC;AAC3E,kBAAc,QAAQ,QAAQ,MAAM,IAAI,MAAM,IAAI,MAAM,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/E,kBAAc,QAAQ,QAAQ,KAAK,MAAM,IAAI,MAAM,KAAK,MAAM,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC;AAChF,UAAM,MAAM,MAAM,KAAK,MAAM,KAAK;AAClC,kBAAc,QAAQ,QAAQ,KAAK,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;AACxD,kBAAc,QAAQ,QAAQ,KAAK,KAAK,GAAG,CAAC,MAAM,MAAM,IAAI,CAAC,CAAC;AAC9D,kBAAc,QAAQ,QAAQ,KAAK,MAAM,IAAI,GAAG,MAAM,MAAM,IAAI,CAAC,CAAC;AAClE,kBAAc,QAAQ,QAAQ,KAAK,KAAK,GAAG,MAAM,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC;AACxE,kBAAc,QAAQ,QAAQ,KAAK,MAAM,IAAI,GAAG,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC;AAClE,kBAAc,QAAQ,QAAQ,KAAK,KAAK,GAAG,CAAC,KAAK,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC;AACxE,kBAAc,QAAQ,QAAQ,KAAK,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC;AACtD,kBAAc,QAAQ,QAAQ,KAAK,KAAK,GAAG,KAAK,MAAM,IAAI,CAAC,CAAC;AAE5D,mBAAe,YAAY,SAAS,IAAI,UAAU,IAAI;AACtD,mBAAe,QAAQC,eAAc,CAAC,KAAK,KAAK,YAAY,KAAK,GAAG,CAAC;AACrE,mBAAe,QAAQA,eAAc,CAAC,KAAK,KAAK,YAAY,KAAK,IAAI,CAAC;AACtE,mBAAe,QAAQA,eAAc,MAAM,KAAK,KAAK,YAAY,KAAK,GAAG,CAAC;AAC1E,mBAAe,QAAQA,eAAc,MAAM,KAAK,KAAK,YAAY,KAAK,IAAI,CAAC;AAC3E,mBAAe,UAAU,QAAQ,KAAK,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC;AAChE,mBAAe,UAAU,QAAQ,KAAK,KAAK,GAAG,YAAY,MAAM,IAAI,CAAC,CAAC;AACtE,UAAM,aAAa,YAAY,MAAM,KAAK,IAAI;AAC9C,UAAM,YAAY,KAAK,KAAK,OAAO,IAAI,cAAc,CAAC;AACtD,UAAM,YAAY,KAAK,MAAM,YAAY,GAAG;AAC5C,WAAO,UAAU,kBAAkBL,MAAK,SAAS,CAAC,UAAUA;AAAA,MAC3DM,UAAS,SAAS;AAAA,IACnB,CAAC;AAAA;AACD,UAAM,YAAY,MAAM,KAAK,IAAI,SAAS;AAC1C,UAAM,YAAY,MAAM,KAAK,IAAI,SAAS;AAC1C,UAAM,WAAW,YAAY;AAC7B,mBAAe,UAAU,QAAQ,WAAW,MAAM,IAAI,WAAW,UAAU,SAAS,CAAC;AACrF,UAAM,aAAa,OAAO,KAAK,IAAI,SAAS;AAC5C,UAAM,aAAa,OAAO,KAAK,IAAI,SAAS;AAC5C,UAAM,YAAY,YAAY;AAC9B,mBAAe,UAAU,QAAQ,WAAW,KAAK,YAAY,WAAW,SAAS,CAAC;AAElF,oBAAgB,YAAY,SAAS,IAAI,UAAU,IAAI;AACvD,oBAAgB,UAAUD,eAAc,CAAC,KAAK,KAAK,YAAY,KAAK,GAAG,CAAC;AACxE,oBAAgB,QAAQA,eAAc,CAAC,KAAK,KAAK,YAAY,KAAK,IAAI,CAAC;AACvE,oBAAgB,UAAUA,eAAc,MAAM,KAAK,KAAK,YAAY,KAAK,GAAG,CAAC;AAC7E,oBAAgB,QAAQA,eAAc,MAAM,KAAK,KAAK,YAAY,KAAK,IAAI,CAAC;AAE5E,oBAAgB,YAAY,SAAS,IAAI,UAAU,IAAI;AACvD,oBAAgB,QAAQA,eAAc,CAAC,MAAM,KAAK,IAAI,KAAK,YAAY,KAAK,GAAG,CAAC;AAChF,oBAAgB,QAAQA,eAAc,CAAC,MAAM,KAAK,IAAI,KAAK,YAAY,KAAK,IAAI,CAAC;AACjF,oBAAgB,QAAQA,eAAc,MAAM,KAAK,IAAI,KAAK,YAAY,KAAK,GAAG,CAAC;AAC/E,oBAAgB,QAAQA,eAAc,MAAM,KAAK,IAAI,KAAK,YAAY,KAAK,IAAI,CAAC;AAEhF,qBAAiB,YAAY,SAAS,IAAI,UAAU,IAAI;AACxD,qBAAiB,UAAUA,eAAc,CAAC,MAAM,KAAK,IAAI,KAAK,YAAY,KAAK,GAAG,CAAC;AACnF,qBAAiB,QAAQA,eAAc,CAAC,MAAM,KAAK,IAAI,KAAK,YAAY,KAAK,IAAI,CAAC;AAClF,qBAAiB,UAAUA,eAAc,MAAM,KAAK,IAAI,KAAK,YAAY,KAAK,GAAG,CAAC;AAClF,qBAAiB,QAAQA,eAAc,MAAM,KAAK,IAAI,KAAK,YAAY,KAAK,IAAI,CAAC;AAEjF,oBAAgB,YAAY,SAAS,IAAI,UAAU,IAAI;AACvD,oBAAgB,QAAQA,eAAc,CAAC,KAAK,KAAK,GAAG,GAAG,CAAC;AACxD,oBAAgB,QAAQA,eAAc,CAAC,KAAK,KAAK,GAAG,IAAI,CAAC;AACzD,oBAAgB,QAAQA,eAAc,KAAK,KAAK,GAAG,GAAG,CAAC;AACvD,oBAAgB,QAAQA,eAAc,KAAK,KAAK,GAAG,IAAI,CAAC;AAExD,qBAAiB,YAAY,SAAS,IAAI,UAAU,IAAI;AACxD,qBAAiB,UAAUA,eAAc,CAAC,KAAK,KAAK,GAAG,GAAG,CAAC;AAC3D,qBAAiB,QAAQA,eAAc,CAAC,KAAK,KAAK,GAAG,IAAI,CAAC;AAC1D,qBAAiB,UAAUA,eAAc,KAAK,KAAK,GAAG,GAAG,CAAC;AAC1D,qBAAiB,QAAQA,eAAc,KAAK,KAAK,GAAG,IAAI,CAAC;AAEzD,WAAO,MAAM;AAAA,MACZ,UAAU;AAAA,MACV,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,iBAAiB;AAAA,MACjB,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,MAClB,mBAAmB;AAAA,MACnB,kBAAkB;AAAA,MAClB,mBAAmB;AAAA,IACpB;AACA,UAAM,aAAa,OAAO;AAC1B,WAAO,MAAM;AAAA,MACZ,UAAU;AAAA,QACT;AAAA,UACC,SAAS,SAAS,UAAU;AAAA,UAC5B,WAAW;AAAA,UACX,SAAS;AAAA,UACT,QAAQ,CAAC,GAAG,GAAG,CAAC;AAAA,UAChB,WAAW,CAAC,GAAG,GAAG,CAAC;AAAA,QACpB;AAAA,MACD;AAAA,MACA,UAAU;AAAA,QACT;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeE,UAAS;AAAA,UACxB,QAAQ,MAAM;AAAA,UACd,QAAQ,CAAC,KAAK,KAAK,GAAG,GAAG,CAAC;AAAA,UAC1B,WAAW,CAAC,GAAG,MAAM,KAAK,GAAG,CAAC;AAAA,QAC/B;AAAA,QACA;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeA,UAAS;AAAA,UACxB,QAAQ,MAAM;AAAA,UACd,QAAQ,CAAC,KAAK,KAAK,GAAG,GAAG,CAAC;AAAA,UAC1B,WAAW,CAAC,GAAG,MAAM,KAAK,GAAG,CAAC;AAAA,QAC/B;AAAA,QACA;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeA,UAAS;AAAA,UACxB,QAAQ;AAAA,UACR,QAAQ,CAAC,KAAK,KAAK,GAAG,GAAG,KAAK,KAAK,CAAC;AAAA,UACpC,WAAW,CAAC,GAAG,GAAG,CAAC;AAAA,QACpB;AAAA,QACA;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeA,UAAS;AAAA,UACxB,QAAQ;AAAA,UACR,QAAQ,CAAC,KAAK,KAAK,GAAG,GAAG,KAAK,KAAK,CAAC;AAAA,UACpC,WAAW,CAAC,GAAG,GAAG,CAAC;AAAA,QACpB;AAAA,QACA;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeA,UAAS;AAAA,UACxB,QAAQ;AAAA,UACR,QAAQ,CAAC,KAAK,KAAK,IAAI,WAAW,GAAG,KAAK,KAAK,CAAC;AAAA,UAChD,WAAW,CAAC,GAAG,GAAG,SAAS;AAAA,QAC5B;AAAA,QACA;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeA,UAAS;AAAA,UACxB,QAAQ;AAAA,UACR,QAAQ,CAAC,KAAK,KAAK,IAAI,WAAW,GAAG,KAAK,KAAK,CAAC;AAAA,UAChD,WAAW,CAAC,GAAG,GAAG,SAAS;AAAA,QAC5B;AAAA,MACD;AAAA,MACA,SAAS;AAAA,QACR;AAAA,UACC,SAAS,QAAQ,UAAU;AAAA,UAC3B,YAAYC,UAAS;AAAA,UACrB,QAAQ;AAAA,YACP,UAAU,UAAU;AAAA,YACpB,UAAU,UAAU;AAAA,YACpB,UAAU,UAAU;AAAA,UACrB;AAAA,QACD;AAAA,QACA;AAAA,UACC,SAAS,QAAQ,UAAU;AAAA,UAC3B,YAAYA,UAAS;AAAA,UACrB,QAAQ;AAAA,YACP,UAAU,UAAU;AAAA,YACpB,UAAU,UAAU;AAAA,YACpB,UAAU,UAAU;AAAA,UACrB;AAAA,QACD;AAAA,QACA;AAAA,UACC,SAAS,QAAQ,UAAU;AAAA,UAC3B,YAAYA,UAAS;AAAA,UACrB,QAAQ,CAAC,QAAQ,UAAU,SAAS,QAAQ,UAAU,SAAS;AAAA,QAChE;AAAA,QACA;AAAA,UACC,SAAS,OAAO,UAAU;AAAA,UAC1B,YAAYA,UAAS;AAAA,UACrB,QAAQ,CAAC,SAAS,UAAU,SAAS,QAAQ,UAAU,UAAU;AAAA,QAClE;AAAA,MACD;AAAA,IACD;AAEA,WAAO,MAAM,CAAC;AAEd,WAAO,UAAU;AACjB,WAAO,UAAU;AAAA,EAClB,SAAS,MAAM;AACd,WAAO,UAAU;AACjB,YAAQ,IAAI,IAAc;AAAA,EAC3B;AACA,SAAO;AACR;AAEA,IAAM,iBAA2B;AAAA,EAChC,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,MAAMb;AAAA,EACN,OAAOE;AACR;;;ADnXA,IAAMY,QAAkB;AAAA,EACvB,UAAU;AAAA,EACV,QAAQ;AAAA;AAAA,IAEPC,SAAQ,MAAM,MAAM,KAAM,KAAK,KAAO,EAAE;AAAA,IACxCA,SAAQ,MAAM,MAAM,MAAM,KAAK,KAAO,EAAE;AAAA,IACxCA,SAAQ,MAAM,MAAM,KAAK,IAAI,KAAK,EAAE;AAAA,IACpCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAM,KAAK,KAAM,EAAE;AAAA,IACvCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAK,IAAI,KAAK,EAAE;AAAA,IACpCA,SAAQ,MAAM,MAAM,KAAM,KAAK,KAAM,EAAE;AAAA,IACvCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAK,IAAI,KAAM,EAAE;AAAA,IACrCA,SAAQ,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC;AAAA,IAChCA,SAAQ,MAAM,MAAM,OAAO,KAAM,KAAO,EAAE;AAAA,IAC1CA,SAAQ,MAAM,MAAM,KAAM,KAAM,KAAO,EAAE;AAAA,IACzCA,SAAQ,MAAM,MAAM,KAAK,IAAI,KAAK,EAAE;AAAA,IACpCA,SAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,SAAQ,MAAM,MAAM,KAAM,KAAK,KAAM,EAAE;AAAA,IACvCA,SAAQ,MAAM,MAAM,KAAM,KAAK,KAAM,EAAE;AAAA,IACvCA,SAAQ,MAAM,MAAM,KAAK,IAAI,KAAM,EAAE;AAAA,IACrCA,SAAQ,MAAM,MAAM,KAAK,IAAI,KAAM,EAAE;AAAA,IACrCA,SAAQ,MAAM,UAAU,IAAI,GAAG,IAAI,CAAC;AAAA,IACpCA,SAAQ,MAAM,MAAM,KAAK,IAAI,KAAK,CAAC;AAAA,EACpC;AAAA,EACA,UAAU;AAAA,IACT,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACL;AAAA,EACA,KAAK;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA;AAAA,EACV;AACD;AAEA,SAASC,OAAM,GAAW,OAAyB;AAClD,QAAM,SAASC,UAASH,MAAK,QAAQ;AACrC,QAAM,UAAUI,QAAO;AACvB,QAAM,UAAUA,QAAO;AACvB,QAAM,SAASA,QAAO;AACtB,SAAO,UAAU,GAAG,OAAO,QAAQ,aAAa,CAAC;AAAA;AACjD,MAAI;AACH,UAAM,cACL,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM;AACzE,WAAO,UAAU,qBAAqBC,OAAK,WAAW,CAAC,cAAcA,OAAK,MAAM,EAAE,CAAC;AAAA;AACnF,WAAO,UAAU,2BAA2BA,OAAK,MAAM,EAAE,CAAC,WAAWA,OAAK,MAAM,EAAE,CAAC;AAAA;AACnF,UAAM,iBAAkB,MAAM,KAAK,IAAKL,MAAK,IAAI;AACjD,UAAM,WAAWM,UAAS,cAAc;AACxC,WAAO,UAAU,yBAAyBD,OAAKE,UAAS,QAAQ,CAAC,CAAC;AAAA;AAClE,UAAM,WAAW,MAAM,KAAK,MAAM,KAAK,MAAM;AAC7C,UAAM,YAAY,WAAW,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM;AAEpE,UAAM,kBAAkBC,aAAY,cAAc,IAAI;AACtD,UAAM,YAAYA,aAAY,eAAe,IAAI;AACjD,UAAM,aAAaA,aAAY,SAAS,IAAI;AAC5C,oBAAgB,OAAO,MAAM,MAAM,EAAE;AACrC,oBAAgB,OAAO,MAAM,MAAM,EAAE;AACrC,oBAAgB,OAAO,MAAM,MAAM,EAAE;AACrC,oBAAgB,OAAO,MAAM,MAAM,EAAE;AACrC,oBAAgB,OAAO,MAAM,MAAM,EAAE;AACrC,oBAAgB,OAAO,MAAM,MAAM,EAAE;AACrC,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,KAAK,CAAC;AACnC,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,KAAK,GAAG;AACrC,QAAI,MAAM,KAAK,MAAM,KAAK,IAAI,MAAM,IAAI;AACvC,YAAM,cAAc,MAAM,EAAE,4BAA4B,MAAM,EAAE,WAAW,MAAM,EAAE;AAAA,IACpF;AACA,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,QAAI,MAAM,MAAM,MAAM,IAAI;AACzB,YAAM,cAAc,MAAM,EAAE,4BAA4B,MAAM,EAAE;AAAA,IACjE;AACA,UAAM,SAAS,MAAM,KAAK,IAAI,MAAM;AACpC,cAAU,OAAO,MAAM,MAAM;AAC7B,QAAI,UAAU,GAAG;AAChB,YAAM,cAAc,MAAM,EAAE,4BAA4B,MAAM,EAAE;AAAA,IACjE;AACA,cAAU,OAAO,MAAM,MAAM,KAAK,IAAI,MAAM,EAAE;AAC9C,cAAU,OAAO,MAAM,MAAM,KAAK,IAAI,MAAM,EAAE;AAC9C,cAAU,OAAO,MAAM,MAAM,EAAE;AAC/B,cAAU,OAAO,MAAM,MAAM,KAAK,CAAC;AACnC,eAAW,OAAO,MAAM,MAAM,EAAE;AAChC,eAAW,OAAO,MAAM,MAAM,EAAE;AAChC,eAAW,OAAO,MAAM,MAAM,EAAE;AAChC,eAAW,OAAO,MAAM,MAAM,EAAE;AAChC,QAAI,MAAM,KAAK,IAAI,MAAM,KAAK,IAAI,MAAM,KAAK,MAAM,KAAK,IAAI,MAAM,IAAI;AACrE,YAAM,cAAc,MAAM,EAAE,4BAA4B,MAAM,EAAE,QAAQ,MAAM,EAAE,QAAQ,MAAM,EAAE;AAAA,IACjG;AACA,eAAW,OAAO,MAAM,MAAM,EAAE;AAChC,eAAW,OAAO,MAAM,MAAM,EAAE;AAChC,eAAW,OAAO,MAAM,MAAM,EAAE;AAChC,eAAW,OAAO,MAAM,MAAM,EAAE;AAChC,eAAW,OAAO,MAAM,MAAM,EAAE;AAChC,eAAW,OAAO,MAAM,MAAM,EAAE;AAChC,UAAM,iBAAiB,cAAc,MAAM,GAAG,gBAAgB,YAAY,CAAC;AAC3E,IAAAC,WAAU,cAAc;AACxB,WAAO,UAAUC,WAAU,eAAe,QAAQ,gBAAgB,QAAQ;AAC1E,UAAM,WAAW,eAAe,MAAM,GAAG,UAAU,YAAY,CAAC;AAChE,IAAAD,WAAU,QAAQ;AAClB,WAAO,UAAUC,WAAU,SAAS,QAAQ,UAAU,QAAQ;AAC9D,UAAM,YAAY,SAAS,MAAM,GAAG,WAAW,YAAY,CAAC;AAC5D,IAAAD,WAAU,SAAS;AACnB,WAAO,UAAUC,WAAU,UAAU,QAAQ,WAAW,QAAQ;AAEhE,YAAQ,YAAY,eAAe,IAAI,OAAO;AAC9C,YAAQ,YAAY,SAAS,IAAI,gBAAgB,UAAU,GAAG,QAAQ,CAAC;AACvE,YAAQ;AAAA,MACP,UAAU,IAAI,SAAS,UAAU,GAAG,SAAS,EAAE,OAAO,GAAG,WAAW,QAAQ;AAAA,IAC7E;AAEA,YAAQ,YAAY,eAAe,IAAI,OAAO;AAC9C,YAAQ,YAAY,SAAS,IAAI,iBAAiB,UAAU,GAAG,QAAQ,CAAC;AACxE,YAAQ,YAAY,UAAU,IAAI,SAAS,UAAU,GAAG,SAAS,CAAC;AAElE,WAAO,YAAY,eAAe,IAAI,WAAW,UAAU,GAAG,CAAC,CAAC;AAChE,WAAO,YAAY,SAAS,IAAI,eAAe,UAAU,GAAG,CAAC,CAAC;AAC9D,WAAO,YAAY,UAAU,IAAI,QAAQ,OAAO,GAAG,GAAG,KAAK,KAAK,CAAC,CAAC;AAElE,WAAO,MAAM;AAAA,MACZ,UAAU;AAAA,MACV,UAAU;AAAA,MACV,SAAS;AAAA,IACV;AACA,UAAM,aAAa,OAAO;AAC1B,WAAO,MAAM;AAAA,MACZ,UAAU;AAAA,QACT;AAAA,UACC,SAAS,SAAS,UAAU;AAAA,UAC5B,WAAW;AAAA,UACX,SAAS;AAAA,UACT,QAAQ,CAAC,GAAG,GAAG,CAAC;AAAA,UAChB,WAAW,CAAC,GAAG,GAAG,CAAC;AAAA,QACpB;AAAA,QACA;AAAA,UACC,SAAS,SAAS,UAAU;AAAA,UAC5B,WAAW;AAAA,UACX,SAAS;AAAA,UACT,QAAQ,CAAC,GAAG,GAAG,CAAC;AAAA,UAChB,WAAW,CAAC,GAAG,GAAG,QAAQ;AAAA,QAC3B;AAAA,QACA;AAAA,UACC,SAAS,SAAS,UAAU;AAAA,UAC5B,WAAW;AAAA,UACX,SAAS;AAAA,UACT,QAAQ,CAAC,KAAK,KAAK,GAAG,GAAG,CAAC;AAAA,UAC1B,WAAW,CAAC,GAAG,GAAG,SAAS;AAAA,QAC5B;AAAA,MACD;AAAA,MACA,UAAU,CAAC;AAAA,MACX,SAAS;AAAA,QACR;AAAA,UACC,SAAS,OAAO,UAAU;AAAA,UAC1B,YAAYC,UAAS;AAAA,UACrB,QAAQ;AAAA,YACP,SAAS,UAAU;AAAA,YACnB,SAAS,UAAU;AAAA,YACnB,SAAS,UAAU;AAAA,UACpB;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAEA,UAAM,sBAAsB,gBAAgB,mBAAmB;AAE/D,UAAM,gBAA0B;AAAA,MAC/B,UAAU,gBAAgB,YAAY;AAAA,MACtC,QAAQ;AAAA,MACR,aAAa,CAAC,GAAG,GAAG,CAAC;AAAA,MACrB,UAAU,CAAC,GAAG,GAAG,CAAC;AAAA,IACnB;AACA,UAAM,UAAoB;AAAA,MACzB,UAAU,UAAU,YAAY;AAAA,MAChC,QAAQ,UAAU,mBAAmB;AAAA,MACrC,aAAa,CAAC,GAAG,GAAG,CAAC;AAAA,MACrB,UAAU,CAAC,GAAG,GAAG,QAAQ;AAAA,IAC1B;AACA,UAAM,WAAqB;AAAA,MAC1B,UAAU,WAAW,YAAY;AAAA,MACjC,QAAQ,WAAW,mBAAmB;AAAA,MACtC,aAAa,CAAC,GAAG,GAAG,CAAC;AAAA,MACrB,UAAU,CAAC,GAAG,GAAG,SAAS;AAAA,IAC3B;AACA,WAAO,MAAM;AAAA,MACZ,eAAe;AAAA,MACf,QAAQ;AAAA,MACR,SAAS;AAAA,IACV;AAEA,WAAO,UAAU;AACjB,WAAO,UAAU;AAAA,EAClB,SAAS,MAAM;AACd,WAAO,UAAU;AACjB,YAAQ,IAAI,IAAc;AAAA,EAC3B;AACA,SAAO;AACR;AAEA,IAAM,iBAA2B;AAAA,EAChC,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,MAAMX;AAAA,EACN,OAAOE;AACR;;;AE7QA;AAAA,EACC,WAAAU;AAAA,EACA,iBAAAC;AAAA,EACA,UAAAC;AAAA,EAGA,QAAAC;AAAA,EACA,WAAAC;AAAA,EAGA,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,YAAAC;AAAA,OACM;AAEP,IAAMC,SAAkB;AAAA,EACvB,UAAU;AAAA,EACV,QAAQ;AAAA;AAAA,IAEPJ,UAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,UAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,UAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,UAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,UAAQ,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC;AAAA,IAChCA,UAAQ,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC;AAAA,IAChCA,UAAQ,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC;AAAA,IAChCA,UAAQ,MAAM,MAAM,KAAK,IAAI,KAAM,EAAE;AAAA,IACrCA,UAAQ,MAAM,MAAM,IAAI,IAAI,KAAM,EAAE;AAAA,IACpCA,UAAQ,MAAM,MAAM,KAAK,IAAI,KAAM,EAAE;AAAA,IACrCA,UAAQ,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC;AAAA,IAC/BA,UAAQ,MAAM,MAAM,KAAK,GAAG,KAAK,CAAC;AAAA,IAClCA,UAAQ,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC;AAAA,IAC/BA,UAAQ,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC;AAAA,IACjCA,UAAQ,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC;AAAA,EAClC;AAAA,EACA,UAAU;AAAA,IACT,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACL;AAAA,EACA,KAAK;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA;AAAA,EACV;AACD;AAIA,SAASK,QAAM,GAAW,OAAyB;AAClD,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,QAAM,SAASJ,WAASG,OAAK,QAAQ;AACrC,QAAM,SAASN,SAAO;AACtB,QAAM,SAASA,SAAO;AACtB,QAAM,YAAYA,SAAO;AACzB,SAAO,UAAU,GAAG,OAAO,QAAQ,aAAa,CAAC;AAAA;AACjD,MAAI;AACH,UAAM,KAAK,MAAM,KAAK;AACtB,UAAM,KAAK,MAAM,KAAK;AACtB,UAAM,KAAK,MAAM,KAAK;AACtB,UAAM,KAAK,MAAM,KAAK;AACtB,UAAM,KAAK,MAAM,KAAK;AACtB,UAAM,MAAM,MAAM,KAAK;AACvB,QAAI,KAAK,IAAI;AACZ,YAAM,cAAc,MAAM,EAAE,4BAA4B,MAAM,EAAE;AAAA,IACjE;AACA,QAAI,KAAK,KAAK,MAAM,IAAI;AACvB,YAAM,cAAc,MAAM,EAAE,4BAA4B,MAAM,EAAE,WAAW,MAAM,EAAE;AAAA,IACpF;AACA,WAAO,UAAU,gBAAgBC,OAAK,MAAM,EAAE,CAAC;AAAA;AAC/C,WAAO,UAAU,2BAA2BA,OAAK,MAAM,EAAE,CAAC;AAAA;AAE1D,kBAAc,SAAU,QAA0B;AACjD,YAAM,YAAYH,SAAQ,SAAS,IAAI,CAAC,EACtC,cAAc,SAAS,IAAI,MAAM,EAAE,EACnC,cAAc,SAAS,IAAI,MAAM,EAAE,EACnC,cAAc,SAAS,IAAI,MAAM,EAAE,EACnC,cAAc,UAAU,KAAK,MAAM,KAAK,MAAM,EAAE,EAChD,cAAc,UAAU,KAAK,MAAM,KAAK,MAAM,EAAE,EAChD,cAAc,SAAS,IAAI,MAAM,EAAE,EACnC,cAAc,SAAS,IAAI,CAAC,EAC5B,eAAe;AACjB,aAAO;AAAA,IACR;AACA,kBAAc,SAAU,QAA0B;AACjD,YAAM,YAAYA,SAAQ,SAAS,IAAI,CAAC,EACtC,cAAc,SAAS,IAAI,MAAM,EAAE,EACnC,cAAc,SAAS,IAAI,MAAM,EAAE,EACnC,cAAc,SAAS,IAAI,MAAM,EAAE,EACnC,cAAc,SAAS,IAAI,MAAM,EAAE,EACnC,cAAc,SAAS,IAAI,MAAM,KAAK,MAAM,EAAE,EAC9C,cAAc,UAAU,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,EAAE,EAC3D,cAAc,UAAU,KAAK,MAAM,KAAK,MAAM,EAAE,EAChD,cAAc,SAAS,IAAI,MAAM,EAAE,EACnC,cAAc,SAAS,IAAI,CAAC,EAC5B,eAAe;AACjB,aAAO;AAAA,IACR;AACA,QAAI,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,IAAI;AACzD,YAAM,cAAc,MAAM,EAAE,4BAA4B,MAAM,EAAE,QAAQ,MAAM,EAAE,QAAQ,MAAM,EAAE,QAAQ,MAAM,EAAE;AAAA,IACjH;AACA,QAAI,MAAM,KAAK,MAAM,IAAI;AACxB,YAAM,cAAc,MAAM,EAAE,4BAA4B,MAAM,EAAE;AAAA,IACjE;AACA,UAAM,cAAc,IAAI,KAAK,KAAK,OAAO,KAAK,MAAM,GAAG;AACvD,QAAI,MAAM,KAAK,cAAc,IAAI,KAAK,IAAI;AACzC,YAAM,cAAc,MAAM,EAAE,4BAA4B,MAAM,EAAE,QAAQ,MAAM,EAAE,QAAQ,MAAM,EAAE;AAAA,IACjG;AACA,UAAM,UAAU,MAAM,KAAK,MAAM,KAAK;AACtC,gBAAY,SAAU,QAA0B;AAC/C,YAAM,UAAUA,SAAQ,SAAS,KAAK,OAAO,EAC3C,cAAc,SAAS,KAAK,UAAU,MAAM,KAAK,MAAM,EAAE,EACzD,UAAU,CAAC,SAAS,KAAK,UAAU,MAAM,KAAK,MAAM,EAAE,EACtD,UAAU,KAAK,OAAO,IAAI,EAC1B,cAAc,CAAC,SAAS,KAAK,OAAO,EAEpC,YAAY,KAAK,OAAO,IAAI;AAC9B,aAAO;AAAA,IACR;AACA,WAAO,QAAQ,YAAY,CAAC,CAAC;AAC7B,WAAO,UAAU,YAAY,CAAC,CAAC;AAC/B,WAAO,UAAU,YAAY,EAAE,CAAC;AAChC,WAAO,UAAU,UAAU,CAAC,CAAC;AAE7B,QAAI,KAAK,MAAM,KAAK,KAAK,KAAK,MAAM,IAAI;AACvC,YAAM,cAAc,MAAM,EAAE,4BAA4B,MAAM,EAAE,QAAQ,MAAM,EAAE,QAAQ,MAAM,EAAE,QAAQ,MAAM,EAAE;AAAA,IACjH;AACA,QAAI,KAAK,MAAM,IAAI;AAClB,YAAM,cAAc,MAAM,EAAE,4BAA4B,MAAM,EAAE;AAAA,IACjE;AACA,UAAM,YAAY,IAAI,KAAK,KAAK,MAAM,KAAK,MAAM,GAAG;AACpD,QAAI,MAAM,KAAK,YAAY,IAAI,KAAK,IAAI;AACvC,YAAM,cAAc,MAAM,EAAE,4BAA4B,MAAM,EAAE,QAAQ,MAAM,EAAE,QAAQ,MAAM,EAAE;AAAA,IACjG;AACA,WAAO,QAAQC,eAAc,GAAG,GAAG,EAAE,CAAC;AACtC,WAAO,QAAQA,eAAc,GAAG,GAAG,EAAE,CAAC;AACtC,UAAM,OAAO,KAAK,MAAM;AACxB,UAAM,OAAQ,IAAI,KAAK,KAAM,MAAM;AACnC,aAAS,IAAI,GAAG,IAAI,MAAM,IAAI,KAAK;AAClC,YAAM,OAAO,OAAO,KAAK,IAAI,IAAI,IAAI;AACrC,YAAM,OAAO,OAAO,KAAK,IAAI,IAAI,IAAI;AACrC,aAAO,QAAQA,eAAc,MAAM,MAAM,EAAE,CAAC;AAAA,IAC7C;AACA,WAAO,UAAUA,eAAc,GAAG,GAAG,KAAK,MAAM,EAAE,CAAC;AACnD,WAAO,UAAUA,eAAc,GAAG,GAAG,EAAE,CAAC;AACxC,WAAO,UAAUA,eAAc,GAAG,GAAG,EAAE,CAAC;AAExC,cAAU,QAAQ,UAAU,CAAC,CAAC;AAC9B,cAAU,UAAU,YAAY,CAAC,CAAC;AAClC,cAAU,UAAU,YAAY,EAAE,CAAC;AAEnC,WAAO,MAAM;AAAA,MACZ,SAAS;AAAA,MACT,SAAS;AAAA,MACT,YAAY;AAAA,IACb;AACA,UAAM,aAAa,OAAO;AAC1B,UAAM,aAAc,IAAI,KAAK,KAAM,MAAM;AACzC,UAAM,UAAU,CAAC,GAAG,MAAM,MAAM,EAAE,EAAE,KAAK,CAAC;AAC1C,UAAM,aAAa,QAAQ,IAAI,CAAC,QAAQ;AACvC,YAAM,UAAoB;AAAA,QACzB,SAAS,UAAU,UAAU,WAAW,GAAG;AAAA,QAC3C,MAAM,GAAG,UAAU;AAAA,QACnB,eAAeK,UAAS;AAAA,QACxB,QAAQ,KAAK,MAAM;AAAA,QACnB,QAAQ,CAAC,KAAK,KAAK,GAAG,GAAG,MAAM,UAAU;AAAA,QACzC,WAAW,CAAC,GAAG,GAAG,CAAC;AAAA,MACpB;AACA,aAAO;AAAA,IACR,CAAC;AACD,UAAM,aAAa,QAAQ,IAAI,CAAC,QAAQ,UAAU,UAAU,WAAW,GAAG,EAAE;AAC5E,WAAO,MAAM;AAAA,MACZ,UAAU;AAAA,QACT;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeA,UAAS;AAAA,UACxB,QAAQ,CAAC,GAAG,GAAG,CAAC;AAAA,UAChB,WAAW,CAAC,KAAK,KAAK,GAAG,GAAG,CAAC;AAAA,QAC9B;AAAA,QACA;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeA,UAAS;AAAA,UACxB,QAAQ,MAAM;AAAA,UACd,QAAQ,CAAC,GAAG,GAAG,CAAC;AAAA,UAChB,WAAW,CAAC,GAAG,GAAG,MAAM,KAAK,MAAM,EAAE;AAAA,QACtC;AAAA,QACA,GAAG;AAAA,MACJ;AAAA,MACA,SAAS;AAAA,QACR;AAAA,UACC,SAAS,QAAQ,UAAU;AAAA,UAC3B,YAAYC,WAAS;AAAA,UACrB,QAAQ,CAAC,GAAG,UAAU;AAAA,QACvB;AAAA,QACA;AAAA,UACC,SAAS,QAAQ,UAAU;AAAA,UAC3B,YAAYA,WAAS;AAAA,UACrB,QAAQ,CAAC,UAAU,UAAU,QAAQ,QAAQ,UAAU,UAAU;AAAA,QAClE;AAAA,QACA;AAAA,UACC,SAAS,OAAO,UAAU;AAAA,UAC1B,YAAYA,WAAS;AAAA,UACrB,QAAQ,CAAC,QAAQ,UAAU,aAAa,UAAU,UAAU,MAAM;AAAA,QACnE;AAAA,MACD;AAAA,IACD;AAEA,WAAO,MAAM,CAAC;AAEd,WAAO,UAAU;AACjB,WAAO,UAAU;AAAA,EAClB,SAAS,MAAM;AACd,WAAO,UAAU;AACjB,YAAQ,IAAI,IAAc;AAAA,EAC3B;AACA,SAAO;AACR;AAEA,IAAM,UAAoB;AAAA,EACzB,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,MAAMC;AAAA,EACN,OAAOC;AACR;;;AChPA;AAAA,EACC,WAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,UAAAC;AAAA,EAGA,QAAAC;AAAA,EACA,WAAAC;AAAA,EAGA,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,YAAAC;AAAA,OACM;AAEP,IAAMC,SAAkB;AAAA,EACvB,UAAU;AAAA,EACV,QAAQ;AAAA;AAAA,IAEPJ,UAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,UAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,EAAE;AAAA,IACtCA,UAAQ,MAAM,MAAM,KAAM,KAAK,KAAO,EAAE;AAAA,IACxCA,UAAQ,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC;AAAA,IAC/BA,UAAQ,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC;AAAA,IAChCA,UAAQ,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC;AAAA,IAC/BA,UAAQ,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC;AAAA,IACjCA,UAAQ,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC;AAAA,EAClC;AAAA,EACA,UAAU;AAAA,IACT,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACL;AAAA,EACA,KAAK;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA;AAAA,EACV;AACD;AAIA,SAASK,QAAM,GAAW,OAAyB;AAClD,MAAI;AACJ,QAAM,SAASJ,WAASG,OAAK,QAAQ;AACrC,QAAM,SAASN,SAAO;AACtB,QAAM,YAAYA,SAAO;AACzB,SAAO,UAAU,GAAG,OAAO,QAAQ,aAAa,CAAC;AAAA;AACjD,MAAI;AACH,UAAM,KAAK,MAAM,KAAK;AACtB,UAAM,KAAK,MAAM,KAAK;AACtB,UAAM,KAAK,MAAM,KAAK;AACtB,WAAO,UAAU,gBAAgBC,OAAK,MAAM,EAAE,CAAC;AAAA;AAE/C,UAAM,cAAcH,UAAQ,IAAI,CAAC,EAC/B,cAAc,IAAI,MAAM,EAAE,EAC1B,cAAc,KAAK,MAAM,IAAI,MAAM,EAAE,EACrC,cAAc,KAAK,MAAM,IAAI,CAAC,EAC9B,eAAe;AACjB,WAAO,QAAQ,WAAW;AAC1B,qBAAiB,SAAU,QAA0B;AACpD,YAAM,eAAeA,UAAQ,SAAS,IAAI,CAAC,EACzC,cAAc,SAAS,IAAI,MAAM,EAAE,EACnC,cAAc,SAAS,IAAI,MAAM,EAAE,EACnC,cAAc,SAAS,IAAI,MAAM,KAAK,MAAM,EAAE,EAC9C,cAAc,UAAU,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,EAAE,EAC3D,cAAc,UAAU,KAAK,MAAM,KAAK,MAAM,EAAE,EAChD,cAAc,SAAS,IAAI,MAAM,EAAE,EACnC,cAAc,SAAS,IAAI,CAAC,EAC5B,eAAe;AACjB,aAAO;AAAA,IACR;AACA,WAAO,UAAU,eAAe,CAAC,CAAC;AAClC,WAAO,UAAU,eAAe,EAAE,CAAC;AAEnC,cAAU,QAAQC,eAAc,GAAG,GAAG,EAAE,CAAC;AACzC,cAAU,QAAQA,eAAc,GAAG,GAAG,EAAE,CAAC;AACzC,UAAM,OAAO,KAAK,MAAM;AACxB,UAAM,OAAQ,IAAI,KAAK,KAAM,MAAM;AACnC,aAAS,IAAI,GAAG,IAAI,MAAM,IAAI,KAAK;AAClC,YAAM,OAAO,OAAO,KAAK,IAAI,IAAI,IAAI;AACrC,YAAM,OAAO,OAAO,KAAK,IAAI,IAAI,IAAI;AACrC,gBAAU,QAAQA,eAAc,MAAM,MAAM,EAAE,CAAC;AAAA,IAChD;AACA,cAAU,UAAUA,eAAc,GAAG,GAAG,KAAK,MAAM,EAAE,CAAC;AAEtD,WAAO,MAAM;AAAA,MACZ,SAAS;AAAA,MACT,YAAY;AAAA,IACb;AACA,UAAM,aAAa,OAAO;AAC1B,WAAO,MAAM;AAAA,MACZ,UAAU;AAAA,QACT;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeK,UAAS;AAAA,UACxB,QAAQ,CAAC,GAAG,GAAG,CAAC;AAAA,UAChB,WAAW,CAAC,GAAG,GAAG,CAAC;AAAA,QACpB;AAAA,QACA;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeA,UAAS;AAAA,UACxB,QAAQ,MAAM;AAAA,UACd,QAAQ,CAAC,GAAG,GAAG,CAAC;AAAA,UAChB,WAAW,CAAC,GAAG,GAAG,CAAC;AAAA,QACpB;AAAA,QACA;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeA,UAAS;AAAA,UACxB,QAAQ,MAAM;AAAA,UACd,QAAQ,CAAC,GAAG,GAAG,CAAC;AAAA,UAChB,WAAW,CAAC,GAAG,GAAG,MAAM,KAAK,MAAM,EAAE;AAAA,QACtC;AAAA,MACD;AAAA,MACA,SAAS;AAAA,QACR;AAAA,UACC,SAAS,OAAO,UAAU;AAAA,UAC1B,YAAYC,WAAS;AAAA,UACrB,QAAQ;AAAA,YACP,UAAU,UAAU;AAAA,YACpB,UAAU,UAAU;AAAA,YACpB,UAAU,UAAU;AAAA,UACrB;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAEA,WAAO,MAAM,CAAC;AAEd,WAAO,UAAU;AACjB,WAAO,UAAU;AAAA,EAClB,SAAS,MAAM;AACd,WAAO,UAAU;AACjB,YAAQ,IAAI,IAAc;AAAA,EAC3B;AACA,SAAO;AACR;AAEA,IAAM,eAAyB;AAAA,EAC9B,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,MAAMC;AAAA,EACN,OAAOC;AACR;;;ACvJA;AAAA,EACC,WAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,UAAAC;AAAA,EAGA,QAAAC;AAAA,EACA,WAAAC;AAAA,EAGA,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,YAAAC;AAAA,OACM;AAEP,IAAMC,SAAkB;AAAA,EACvB,UAAU;AAAA,EACV,QAAQ;AAAA;AAAA,IAEPJ,UAAQ,MAAM,MAAM,KAAO,KAAM,KAAO,EAAE;AAAA,IAC1CA,UAAQ,MAAM,MAAM,KAAK,IAAI,KAAK,CAAC;AAAA,IACnCA,UAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,CAAC;AAAA,IACrCA,UAAQ,MAAM,MAAM,KAAK,KAAK,KAAM,CAAC;AAAA,IACrCA,UAAQ,MAAM,MAAM,KAAK,IAAI,KAAM,CAAC;AAAA,IACpCA,UAAQ,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC;AAAA,IAC/BA,UAAQ,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC;AAAA,IAChCA,UAAQ,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC;AAAA,IAC9BA,UAAQ,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC;AAAA,IAC7BA,UAAQ,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC;AAAA,IAC7BA,UAAQ,MAAM,MAAM,KAAK,GAAG,KAAK,CAAC;AAAA,IAClCA,UAAQ,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC;AAAA,IACjCA,UAAQ,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC;AAAA,EAClC;AAAA,EACA,UAAU;AAAA,IACT,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACL;AAAA,EACA,KAAK;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA;AAAA,EACV;AACD;AAKA,SAASK,QAAM,GAAW,OAAyB;AAClD,MAAI;AACJ,MAAI;AACJ,QAAM,SAASJ,WAASG,OAAK,QAAQ;AACrC,QAAM,SAASN,SAAO;AACtB,QAAM,WAAWA,SAAO;AACxB,QAAM,SAASA,SAAO;AACtB,SAAO,UAAU,GAAG,OAAO,QAAQ,aAAa,CAAC;AAAA;AACjD,MAAI;AACH,UAAM,KAAK,MAAM,KAAK;AACtB,UAAM,SAAS,MAAM,MAAM,MAAM,KAAK;AACtC,UAAM,SAAS,MAAM,MAAM,MAAM,KAAK;AACtC,WAAO,UAAU,eAAeC,OAAK,MAAM,EAAE,CAAC;AAAA;AAC9C,eAAW,SAAU,IAAwB;AAC5C,YAAM,SAAqB,CAAC;AAC5B,YAAM,WAAWH,UAAQ,MAAM,KAAK,GAAG,EAAE,EACvC,iBAAiB,MAAM,EAAE,EACzB,cAAc,MAAM,KAAK,GAAG,KAAK,MAAM,EAAE,EACzC,iBAAiB,MAAM,EAAE,EACzB,cAAc,CAAC,MAAM,KAAK,GAAG,KAAK,MAAM,EAAE,EAC1C,iBAAiB,MAAM,EAAE,EACzB,cAAc,CAAC,MAAM,KAAK,GAAG,EAAE,EAC/B,iBAAiB,MAAM,EAAE,EACzB,eAAe;AACjB,aAAO,KAAK,QAAQ;AACpB,eAAS,IAAI,GAAG,IAAI,MAAM,KAAK,GAAG,KAAK;AACtC,eAAO,KAAKC,gBAAc,MAAM,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,QAAQ,EAAE,CAAC;AACvE,eAAO,KAAKA,gBAAc,CAAC,MAAM,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,QAAQ,EAAE,CAAC;AAAA,MACzE;AACA,eAAS,IAAI,GAAG,IAAI,MAAM,KAAK,GAAG,KAAK;AACtC,eAAO,KAAKA,gBAAc,CAAC,MAAM,KAAK,IAAI,IAAI,QAAQ,KAAK,MAAM,IAAI,EAAE,CAAC;AACxE,eAAO;AAAA,UACNA,gBAAc,CAAC,MAAM,KAAK,IAAI,IAAI,QAAQ,KAAK,MAAM,KAAK,MAAM,IAAI,EAAE;AAAA,QACvE;AAAA,MACD;AACA,aAAO;AAAA,IACR;AACA,aAAS,SAAU,IAAY,IAAsB;AACpD,YAAM,OAAOD,UAAQ,MAAM,KAAK,GAAG,EAAE,EACnC,cAAc,MAAM,KAAK,GAAG,KAAK,EAAE,EACnC,cAAc,CAAC,MAAM,KAAK,GAAG,KAAK,EAAE,EACpC,cAAc,CAAC,MAAM,KAAK,GAAG,EAAE,EAC/B,eAAe;AACjB,aAAO;AAAA,IACR;AAEA,UAAM,MAAM,MAAM,KAAK;AACvB,UAAM,MAAM,MAAM,KAAK;AACvB,UAAM,QAAQ,MAAM,KAAK,IAAI,MAAM,MAAM;AACzC,UAAM,MAAM,MAAM,KAAK,MAAM;AAC7B,UAAM,YAAYA,UAAQ,KAAK,CAAC,EAC9B,cAAc,KAAK,MAAM,EAAE,EAC3B,cAAc,CAAC,KAAK,MAAM,EAAE,EAC5B,cAAc,CAAC,KAAK,CAAC,EACrB,eAAe;AACjB,UAAM,YAAYA,UAAQ,MAAM,MAAM,EAAE,EACtC,cAAc,MAAM,GAAG,EACvB,cAAc,CAAC,MAAM,GAAG,EACxB,cAAc,CAAC,KAAK,MAAM,EAAE,EAC5B,eAAe;AACjB,UAAM,eAAeA,UAAQ,KAAK,MAAM,EAAE,EACxC,cAAc,KAAK,MAAM,KAAK,MAAM,EAAE,EACtC,cAAc,CAAC,KAAK,MAAM,KAAK,MAAM,EAAE,EACvC,cAAc,CAAC,KAAK,MAAM,EAAE,EAC5B,eAAe;AACjB,WAAO,QAAQ,SAAS;AACxB,WAAO,QAAQ,SAAS;AACxB,WAAO,UAAU,YAAY;AAE7B,aAAS,CAAC,EAAE,QAAQ,CAAC,QAAQ,SAAS,QAAQ,GAAG,CAAC;AAClD,aAAS,UAAU,OAAO,CAAC,MAAM,KAAK,GAAG,IAAI,MAAM,EAAE,CAAC;AAEtD,UAAM,aAAa,MAAM,KAAK,MAAM,OAAO,MAAM,KAAK;AACtD,aAAS,IAAI,GAAG,IAAI,MAAM,IAAI,KAAK;AAClC,eAAS,IAAI,SAAS,EAAE,QAAQ,CAAC,QAAQ,OAAO,QAAQ,GAAG,CAAC;AAAA,IAC7D;AACA,WAAO,UAAU,OAAO,GAAG,MAAM,EAAE,CAAC;AAEpC,WAAO,MAAM;AAAA,MACZ,SAAS;AAAA,MACT,WAAW;AAAA,MACX,SAAS;AAAA,IACV;AACA,UAAM,aAAa,OAAO;AAC1B,WAAO,MAAM;AAAA,MACZ,UAAU;AAAA,QACT;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeM,UAAS;AAAA,UACxB,QAAQ,MAAM;AAAA,UACd,QAAQ,CAAC,GAAG,GAAG,CAAC;AAAA,UAChB,WAAW,CAAC,GAAG,GAAG,CAAC;AAAA,QACpB;AAAA,QACA;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeA,UAAS;AAAA,UACxB,QAAQ,MAAM;AAAA,UACd,QAAQ,CAAC,KAAK,KAAK,GAAG,GAAG,CAAC;AAAA,UAC1B,WAAW,CAAC,GAAG,MAAM,KAAK,MAAM,IAAI,CAAC;AAAA,QACtC;AAAA,MACD;AAAA,MACA,SAAS;AAAA,QACR;AAAA,UACC,SAAS,OAAO,UAAU;AAAA,UAC1B,YAAYC,WAAS;AAAA,UACrB,QAAQ,CAAC,UAAU,UAAU,QAAQ,UAAU,UAAU,SAAS;AAAA,QACnE;AAAA,MACD;AAAA,IACD;AAEA,WAAO,MAAM,CAAC;AAEd,WAAO,UAAU;AACjB,WAAO,UAAU;AAAA,EAClB,SAAS,MAAM;AACd,WAAO,UAAU;AACjB,YAAQ,IAAI,IAAc;AAAA,EAC3B;AACA,SAAO;AACR;AAEA,IAAM,SAAmB;AAAA,EACxB,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,MAAMC;AAAA,EACN,OAAOC;AACR;;;AC1LA;AAAA,EACC,WAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,UAAAC;AAAA,EAEA,YAAAC;AAAA,EACA,QAAAC;AAAA,EACA,WAAAC;AAAA,EAGA,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,YAAAC;AAAA,OACM;AAEP,IAAMC,SAAkB;AAAA,EACvB,UAAU;AAAA,EACV,QAAQ;AAAA;AAAA,IAEPJ,UAAQ,MAAM,MAAM,MAAM,KAAK,KAAM,EAAE;AAAA,IACvCA,UAAQ,MAAM,MAAM,KAAM,KAAK,KAAM,EAAE;AAAA,IACvCA,UAAQ,MAAM,MAAM,KAAK,KAAK,KAAK,EAAE;AAAA,IACrCA,UAAQ,MAAM,MAAM,KAAK,KAAK,KAAK,EAAE;AAAA,IACrCA,UAAQ,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC;AAAA,IAC7BA,UAAQ,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC;AAAA,IAC7BA,UAAQ,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC;AAAA,IAC7BA,UAAQ,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC;AAAA,IAC7BA,UAAQ,MAAM,MAAM,KAAK,GAAG,KAAK,CAAC;AAAA,IAClCA,UAAQ,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC;AAAA,IACjCA,UAAQ,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC;AAAA,IACjCA,UAAQ,MAAM,MAAM,IAAI,GAAG,IAAI,EAAE;AAAA,IACjCA,UAAQ,MAAM,MAAM,IAAI,GAAG,IAAI,EAAE;AAAA,IACjCA,UAAQ,MAAM,MAAM,IAAI,GAAG,KAAK,EAAE;AAAA,IAClCA,UAAQ,MAAM,MAAM,IAAI,GAAG,KAAK,EAAE;AAAA,IAClCA,UAAQ,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC;AAAA,IACjCA,UAAQ,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC;AAAA,IACjCA,UAAQ,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC;AAAA,IACjCA,UAAQ,MAAM,MAAM,KAAK,KAAK,KAAK,GAAG;AAAA,IACtCA,UAAQ,MAAM,MAAM,GAAG,KAAK,KAAK,GAAG;AAAA,IACpCA,UAAQ,MAAM,MAAM,GAAG,KAAK,KAAK,GAAG;AAAA,EACrC;AAAA,EACA,UAAU;AAAA,IACT,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACL;AAAA,EACA,KAAK;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA;AAAA,EACV;AACD;AAIA,SAASK,QAAM,GAAW,OAAyB;AAClD,MAAI;AACJ,MAAI;AACJ,QAAM,SAASJ,WAASG,OAAK,QAAQ;AACrC,QAAM,WAAWP,SAAO;AACxB,QAAM,WAAWA,SAAO;AACxB,QAAM,SAASA,SAAO;AACtB,QAAM,eAAeA,SAAO;AAC5B,QAAM,YAAYA,SAAO;AACzB,SAAO,UAAU,GAAG,OAAO,QAAQ,aAAa,CAAC;AAAA;AACjD,MAAI;AACH,QAAI,MAAM,KAAK,MAAM,KAAK,MAAM,IAAI;AACnC,YAAM,cAAc,MAAM,EAAE,4BAA4B,MAAM,EAAE,WAAW,MAAM,EAAE;AAAA,IACpF;AACA,QAAI,MAAM,KAAK,MAAM,KAAK,MAAM,IAAI;AACnC,YAAM,cAAc,MAAM,EAAE,4BAA4B,MAAM,EAAE,WAAW,MAAM,EAAE;AAAA,IACpF;AACA,QAAI,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,IAAI,MAAM,IAAI;AAClD,YAAM,cAAc,MAAM,EAAE,4BAA4B,MAAM,EAAE,QAAQ,MAAM,EAAE,WAAW,MAAM,EAAE;AAAA,IACpG;AACA,UAAM,OAAO,MAAM,MAAM,IAAI,IAAI,KAAK,KAAK,CAAC;AAC5C,UAAM,OAAO,MAAM,MAAM,IAAI,IAAI,KAAK,KAAK,CAAC;AAC5C,UAAM,QAAQ,MAAM,KAAK,IAAI,QAAQ,MAAM,KAAK,IAAI;AACpD,UAAM,QAAQ,MAAM,KAAK,IAAI,QAAQ,MAAM,KAAK,IAAI;AACpD,UAAM,SAAS,KAAK,KAAK,SAAS,IAAI,SAAS,CAAC;AAChD,UAAM,QAAQ,MAAM,KAAK,MAAM,KAAK,MAAM;AAC1C,UAAM,mBAAmB,KAAK,KAAK,UAAU,IAAI,SAAS,CAAC;AAC3D,UAAM,kBAAkB,KAAK,MAAM,OAAO,MAAM;AAChD,UAAM,eAAe,KAAK,MAAM,OAAO,KAAK;AAC5C,WAAO,UAAU,uBAAuBE,OAAK,gBAAgB,CAAC,gBAAgBA;AAAA,MAC7ED,UAAS,eAAe;AAAA,IACzB,CAAC;AAAA;AACD,WAAO,UAAU,iBAAiBC,OAAKD,UAAS,YAAY,CAAC,CAAC;AAAA;AAC9D,UAAM,qBAAqB,MAAM,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,eAAe;AAC5E,WAAO,UAAU,yBAAyBC,OAAK,kBAAkB,CAAC;AAAA;AAClE,UAAM,SAAS,KAAK,MAAM,qBAAqB,MAAM,KAAK,MAAM,KAAK,MAAM,CAAC;AAC5E,UAAM,SAAS,KAAK,MAAM,MAAM,IAAI,kBAAkB;AACtD,sBAAkB,SAAU,IAAY,IAAY,OAAyB;AAC5E,YAAM,OAAOJ,UAAQ,IAAI,EAAE,EACzB,WAAW,QAAQ,KAAK,KAAK,QAAQ,MAAM,EAC3C,YAAY,QAAQ,KAAK,KAAK,GAAG,KAAK,EACtC,WAAW,QAAQ,KAAK,KAAK,QAAQ,MAAM,EAC3C,YAAY,QAAQ,KAAK,IAAI,QAAQ,KAAK,KAAK,CAAC,EAChD,WAAW,QAAQ,QAAQ,MAAM,EACjC,YAAY,QAAS,IAAI,KAAK,KAAM,GAAG,QAAQ,KAAK,EAAE,EACtD,WAAW,QAAQ,QAAQ,MAAM,EACjC,YAAY,OAAO,QAAQ,KAAK,KAAK,CAAC;AACxC,aAAO;AAAA,IACR;AACA,aAAS,SAAU,IAAY,IAAY,OAAyB;AACnE,YAAM,MAAM,KAAK,SAAS,KAAK,IAAI,QAAQ,KAAK,KAAK,MAAM;AAC3D,YAAM,MAAM,KAAK,SAAS,KAAK,IAAI,QAAQ,KAAK,KAAK,MAAM;AAC3D,YAAM,OAAOA,UAAQ,KAAK,GAAG,EAC3B,eAAe,QAAQ,KAAK,IAAI,MAAM,EACtC,eAAe,QAAQ,KAAK,KAAK,GAAG,MAAM,EAAE,EAC5C,eAAe,OAAO,MAAM,EAC5B,eAAe;AACjB,aAAO;AAAA,IACR;AAEA,QAAI,MAAM,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK,GAAG;AACvD,YAAM,cAAc,MAAM,EAAE,4BAA4B,MAAM,EAAE,UAAU,MAAM,EAAE;AAAA,IACnF;AACA,UAAM,cAAcA,UAAQ,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,EACpD,cAAc,CAAC,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,EACzC,iBAAiB,MAAM,EAAE,EACzB,cAAc,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,KAAK,CAAC,EAC1C,iBAAiB,MAAM,EAAE,EACzB,cAAc,MAAM,KAAK,GAAG,CAAC,MAAM,KAAK,CAAC,EACzC,iBAAiB,MAAM,EAAE,EACzB,eAAe,EACf,iBAAiB,MAAM,EAAE;AAC3B,QAAI,MAAM,MAAM,MAAM,KAAK,IAAI,MAAM,MAAM,KAAK,MAAM,MAAM,MAAM,KAAK,IAAI,MAAM,MAAM,GAAG;AACzF,YAAM,cAAc,MAAM,EAAE,4BAA4B,MAAM,EAAE,QAAQ,MAAM,EAAE,WAAW,MAAM,EAAE;AAAA,IACpG;AACA,UAAM,cAAcA,UAAQ,MAAM,KAAK,IAAI,MAAM,IAAI,MAAM,KAAK,IAAI,MAAM,EAAE,EAC1E,cAAc,CAAC,MAAM,KAAK,IAAI,MAAM,IAAI,MAAM,KAAK,IAAI,MAAM,EAAE,EAC/D,iBAAiB,MAAM,EAAE,EACzB,cAAc,CAAC,MAAM,KAAK,IAAI,MAAM,IAAI,CAAC,MAAM,KAAK,IAAI,MAAM,EAAE,EAChE,iBAAiB,MAAM,EAAE,EACzB,cAAc,MAAM,KAAK,IAAI,MAAM,IAAI,CAAC,MAAM,KAAK,IAAI,MAAM,EAAE,EAC/D,iBAAiB,MAAM,EAAE,EACzB,eAAe,EACf,iBAAiB,MAAM,EAAE;AAC3B,QAAI,MAAM,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK,GAAG;AACvD,YAAM,cAAc,MAAM,EAAE,4BAA4B,MAAM,EAAE,UAAU,MAAM,EAAE;AAAA,IACnF;AACA,UAAM,WAAWA,UAAQ,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,EACjD,cAAc,CAAC,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,EACzC,iBAAiB,MAAM,EAAE,EACzB,cAAc,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,KAAK,CAAC,EAC1C,iBAAiB,MAAM,EAAE,EACzB,cAAc,MAAM,KAAK,GAAG,CAAC,MAAM,KAAK,CAAC,EACzC,iBAAiB,MAAM,EAAE,EACzB,eAAe,EACf,iBAAiB,MAAM,EAAE;AAC3B,aAAS,QAAQ,WAAW;AAC5B,aAAS,QAAQ,WAAW;AAC5B,aAAS,UAAU,QAAQ;AAC3B,UAAM,QAAQ,MAAM,MAAM,MAAM,KAAK;AACrC,UAAM,QAAQ,MAAM,MAAM,MAAM,KAAK;AACrC,UAAM,QAAQ,MAAM,MAAM,MAAM,KAAK;AACrC,UAAM,QAAQ,MAAM,MAAM,MAAM,KAAK;AACrC,QAAI,MAAM,KAAK,MAAM,KAAK,MAAM,IAAI;AACnC,YAAM,cAAc,MAAM,EAAE,4BAA4B,MAAM,EAAE,UAAU,MAAM,EAAE;AAAA,IACnF;AACA,QAAI,QAAQ,MAAM,KAAK,MAAM,IAAI;AAChC,YAAM,cAAc,MAAM,EAAE,UAAU,MAAM,EAAE,4BAA4B,MAAM,EAAE;AAAA,IACnF;AACA,QAAI,QAAQ,MAAM,KAAK,MAAM,IAAI;AAChC,YAAM,cAAc,MAAM,EAAE,UAAU,MAAM,EAAE,4BAA4B,MAAM,EAAE;AAAA,IACnF;AACA,UAAM,aAAyB,CAAC;AAChC,aAAS,IAAI,GAAG,IAAI,MAAM,KAAK,GAAG,KAAK;AACtC,iBAAW;AAAA,QACVC,gBAAc,MAAM,KAAK,IAAI,MAAM,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,EAAE;AAAA,MAC3E;AACA,iBAAW;AAAA,QACVA,gBAAc,CAAC,MAAM,KAAK,IAAI,MAAM,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,EAAE;AAAA,MAC5E;AAAA,IACD;AACA,aAAS,IAAI,GAAG,IAAI,MAAM,KAAK,GAAG,KAAK;AACtC,iBAAW;AAAA,QACVA,gBAAc,CAAC,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,IAAI,MAAM,IAAI,MAAM,EAAE;AAAA,MAC3E;AACA,iBAAW;AAAA,QACVA,gBAAc,CAAC,MAAM,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,MAAM,IAAI,MAAM,EAAE;AAAA,MAC5E;AAAA,IACD;AACA,UAAM,aAAyB,CAAC;AAChC,aAAS,IAAI,GAAG,IAAI,MAAM,KAAK,GAAG,KAAK;AACtC,iBAAW;AAAA,QACVA,gBAAc,MAAM,KAAK,IAAI,MAAM,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,EAAE;AAAA,MAC3E;AACA,iBAAW;AAAA,QACVA,gBAAc,CAAC,MAAM,KAAK,IAAI,MAAM,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,EAAE;AAAA,MAC5E;AAAA,IACD;AACA,aAAS,IAAI,GAAG,IAAI,MAAM,KAAK,GAAG,KAAK;AACtC,iBAAW;AAAA,QACVA,gBAAc,CAAC,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,IAAI,MAAM,IAAI,MAAM,EAAE;AAAA,MAC3E;AACA,iBAAW;AAAA,QACVA,gBAAc,CAAC,MAAM,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,MAAM,IAAI,MAAM,EAAE;AAAA,MAC5E;AAAA,IACD;AACA,eAAW,QAAQ,CAAC,QAAQ;AAC3B,eAAS,QAAQ,GAAG;AAAA,IACrB,CAAC;AACD,eAAW,QAAQ,CAAC,QAAQ;AAC3B,eAAS,UAAU,GAAG;AAAA,IACvB,CAAC;AACD,UAAM,SAAqB,CAAC;AAC5B,WAAO,KAAK,gBAAgB,MAAM,KAAK,IAAI,MAAM,MAAM,KAAK,IAAI,MAAM,YAAY,CAAC;AACnF,WAAO,KAAK,gBAAgB,MAAM,KAAK,IAAI,MAAM,MAAM,KAAK,IAAI,MAAM,YAAY,CAAC;AACnF,WAAO;AAAA,MACN,gBAAgB,CAAC,MAAM,KAAK,IAAI,MAAM,MAAM,KAAK,IAAI,MAAM,KAAK,KAAK,YAAY;AAAA,IAClF;AACA,WAAO;AAAA,MACN,gBAAgB,CAAC,MAAM,KAAK,IAAI,MAAM,MAAM,KAAK,IAAI,MAAM,KAAK,KAAK,YAAY;AAAA,IAClF;AACA,WAAO;AAAA,MACN,gBAAgB,CAAC,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,MAAM,KAAK,KAAK,YAAY;AAAA,IACnF;AACA,WAAO;AAAA,MACN,gBAAgB,CAAC,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,MAAM,KAAK,KAAK,YAAY;AAAA,IACnF;AACA,WAAO,KAAK,gBAAgB,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,MAAM,CAAC,YAAY,CAAC;AACrF,WAAO,KAAK,gBAAgB,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,MAAM,CAAC,YAAY,CAAC;AACrF,UAAM,OAAmB,CAAC;AAC1B,SAAK,KAAK,OAAO,MAAM,KAAK,IAAI,MAAM,MAAM,KAAK,IAAI,MAAM,YAAY,CAAC;AACxE,SAAK,KAAK,OAAO,CAAC,MAAM,KAAK,IAAI,MAAM,MAAM,KAAK,IAAI,MAAM,KAAK,KAAK,YAAY,CAAC;AACnF,SAAK,KAAK,OAAO,CAAC,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,MAAM,KAAK,KAAK,YAAY,CAAC;AACpF,SAAK,KAAK,OAAO,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,MAAM,CAAC,YAAY,CAAC;AAC1E,WAAO,QAAQ,CAAC,QAAQ;AACvB,eAAS,UAAU,GAAG;AAAA,IACvB,CAAC;AACD,SAAK,QAAQ,CAAC,QAAQ;AACrB,eAAS,UAAU,GAAG;AAAA,IACvB,CAAC;AAED,aAAS,QAAQ,QAAQ;AACzB,eAAW,QAAQ,CAAC,QAAQ;AAC3B,eAAS,QAAQ,GAAG;AAAA,IACrB,CAAC;AACD,aAAS,UAAU,WAAW;AAC9B,aAAS,UAAU,WAAW;AAC9B,eAAW,QAAQ,CAAC,QAAQ;AAC3B,eAAS,UAAU,GAAG;AAAA,IACvB,CAAC;AACD,WAAO,QAAQ,CAAC,QAAQ;AACvB,eAAS,UAAU,GAAG;AAAA,IACvB,CAAC;AACD,SAAK,QAAQ,CAAC,QAAQ;AACrB,eAAS,UAAU,GAAG;AAAA,IACvB,CAAC;AAED,QAAI,MAAM,MAAM,MAAM,IAAI;AACzB,YAAM,cAAc,MAAM,EAAE,mBAAmB,MAAM,EAAE;AAAA,IACxD;AACA,WAAO,QAAQA,gBAAc,GAAG,GAAG,MAAM,KAAK,CAAC,CAAC;AAChD,WAAO,UAAUA,gBAAc,GAAG,GAAG,MAAM,KAAK,CAAC,CAAC;AAElD,iBAAa,QAAQA,gBAAc,GAAG,GAAG,MAAM,KAAK,CAAC,CAAC;AACtD,iBAAa,UAAUA,gBAAc,GAAG,GAAG,MAAM,KAAK,CAAC,CAAC;AAExD,UAAM,qBAAqB,MAAM,KAAK,KAAK,IAAI,eAAe;AAC9D,UAAM,mBAAmB,qBAAqB,KAAK,IAAI,eAAe;AACtE,UAAM,QAAQ,QAAQ,qBAAqB,IAAI,oBAAoB,KAAK,IAAI,YAAY;AACxF,UAAM,QAAQ,QAAQ,qBAAqB,IAAI,oBAAoB,KAAK,IAAI,YAAY;AACxF,UAAM,mBACL,mBAAmB,KAAK,qBAAqB,mBAAmB;AACjE,UAAM,OAAO,mBAAmB,MAAM,KAAK,MAAM,KAAK;AACtD,UAAM,YAAYD,UAAQ,MAAM,IAAI,EAClC,cAAc,CAAC,MAAM,IAAI,EACzB,cAAc,CAAC,MAAM,CAAC,IAAI,EAC1B,cAAc,MAAM,CAAC,IAAI,EACzB,eAAe;AACjB,cAAU,QAAQ,SAAS;AAE3B,WAAO,MAAM;AAAA,MACZ,WAAW;AAAA,MACX,WAAW;AAAA,MACX,SAAS;AAAA,MACT,eAAe;AAAA,MACf,YAAY;AAAA,IACb;AACA,UAAM,aAAa,OAAO;AAC1B,WAAO,MAAM;AAAA,MACZ,UAAU;AAAA,QACT;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeO,WAAS;AAAA,UACxB,QAAQ,MAAM;AAAA,UACd,QAAQ,CAAC,GAAG,GAAG,CAAC;AAAA,UAChB,WAAW,CAAC,GAAG,GAAG,MAAM,KAAK,MAAM,EAAE;AAAA,QACtC;AAAA,QACA;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeA,WAAS;AAAA,UACxB,QAAQ,MAAM;AAAA,UACd,QAAQ,CAAC,GAAG,GAAG,CAAC;AAAA,UAChB,WAAW,CAAC,GAAG,GAAG,CAAC;AAAA,QACpB;AAAA,QACA;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeA,WAAS;AAAA,UACxB,QAAQ;AAAA,UACR,QAAQ,CAAC,GAAG,KAAK,KAAK,IAAI,iBAAiB,YAAY;AAAA,UACvD,WAAW;AAAA,YACV,MAAM,KAAK,IAAI;AAAA,YACf,MAAM,KAAK,IAAI;AAAA,YACf,MAAM,KAAK;AAAA,UACZ;AAAA,QACD;AAAA,QACA;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeA,WAAS;AAAA,UACxB,QAAQ;AAAA,UACR,QAAQ,CAAC,GAAG,KAAK,KAAK,IAAI,iBAAiB,KAAK,KAAK,YAAY;AAAA,UACjE,WAAW;AAAA,YACV,CAAC,MAAM,KAAK,IAAI;AAAA,YAChB,MAAM,KAAK,IAAI;AAAA,YACf,MAAM,KAAK;AAAA,UACZ;AAAA,QACD;AAAA,QACA;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeA,WAAS;AAAA,UACxB,QAAQ;AAAA,UACR,QAAQ,CAAC,GAAG,KAAK,KAAK,IAAI,iBAAiB,KAAK,KAAK,YAAY;AAAA,UACjE,WAAW;AAAA,YACV,CAAC,MAAM,KAAK,IAAI;AAAA,YAChB,CAAC,MAAM,KAAK,IAAI;AAAA,YAChB,MAAM,KAAK;AAAA,UACZ;AAAA,QACD;AAAA,QACA;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeA,WAAS;AAAA,UACxB,QAAQ;AAAA,UACR,QAAQ,CAAC,GAAG,KAAK,KAAK,IAAI,iBAAiB,CAAC,YAAY;AAAA,UACxD,WAAW;AAAA,YACV,MAAM,KAAK,IAAI;AAAA,YACf,CAAC,MAAM,KAAK,IAAI;AAAA,YAChB,MAAM,KAAK;AAAA,UACZ;AAAA,QACD;AAAA,QACA;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeA,WAAS;AAAA,UACxB,QAAQ;AAAA,UACR,QAAQ,CAAC,GAAG,KAAK,KAAK,IAAI,iBAAiB,YAAY;AAAA,UACvD,WAAW;AAAA,YACV,MAAM,KAAK,IAAI;AAAA,YACf,MAAM,KAAK,IAAI;AAAA,YACf,MAAM,KAAK;AAAA,UACZ;AAAA,QACD;AAAA,QACA;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeA,WAAS;AAAA,UACxB,QAAQ;AAAA,UACR,QAAQ,CAAC,GAAG,KAAK,KAAK,IAAI,iBAAiB,KAAK,KAAK,YAAY;AAAA,UACjE,WAAW;AAAA,YACV,CAAC,MAAM,KAAK,IAAI;AAAA,YAChB,MAAM,KAAK,IAAI;AAAA,YACf,MAAM,KAAK;AAAA,UACZ;AAAA,QACD;AAAA,QACA;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeA,WAAS;AAAA,UACxB,QAAQ;AAAA,UACR,QAAQ,CAAC,GAAG,KAAK,KAAK,IAAI,iBAAiB,KAAK,KAAK,YAAY;AAAA,UACjE,WAAW;AAAA,YACV,CAAC,MAAM,KAAK,IAAI;AAAA,YAChB,CAAC,MAAM,KAAK,IAAI;AAAA,YAChB,MAAM,KAAK;AAAA,UACZ;AAAA,QACD;AAAA,QACA;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeA,WAAS;AAAA,UACxB,QAAQ;AAAA,UACR,QAAQ,CAAC,GAAG,KAAK,KAAK,IAAI,iBAAiB,CAAC,YAAY;AAAA,UACxD,WAAW;AAAA,YACV,MAAM,KAAK,IAAI;AAAA,YACf,CAAC,MAAM,KAAK,IAAI;AAAA,YAChB,MAAM,KAAK;AAAA,UACZ;AAAA,QACD;AAAA,QACA;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeA,WAAS;AAAA,UACxB,QAAQ;AAAA,UACR,QAAQ,CAAC,GAAG,GAAG,CAAC;AAAA,UAChB,WAAW,CAAC,GAAG,GAAG,CAAC,IAAI;AAAA,QACxB;AAAA,QACA;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeA,WAAS;AAAA,UACxB,QAAQ;AAAA,UACR,QAAQ,CAAC,GAAG,GAAG,CAAC;AAAA,UAChB,WAAW,CAAC,GAAG,GAAG,MAAM,EAAE;AAAA,QAC3B;AAAA,MACD;AAAA,MACA,SAAS;AAAA,QACR;AAAA,UACC,SAAS,QAAQ,UAAU;AAAA,UAC3B,YAAYC,WAAS;AAAA,UACrB,QAAQ;AAAA,YACP,UAAU,UAAU;AAAA,YACpB,UAAU,UAAU;AAAA,YACpB,UAAU,UAAU;AAAA,YACpB,UAAU,UAAU;AAAA,UACrB;AAAA,QACD;AAAA,QACA;AAAA,UACC,SAAS,QAAQ,UAAU;AAAA,UAC3B,YAAYA,WAAS;AAAA,UACrB,QAAQ;AAAA,YACP,UAAU,UAAU;AAAA,YACpB,UAAU,UAAU;AAAA,YACpB,UAAU,UAAU;AAAA,YACpB,UAAU,UAAU;AAAA,UACrB;AAAA,QACD;AAAA,QACA;AAAA,UACC,SAAS,QAAQ,UAAU;AAAA,UAC3B,YAAYA,WAAS;AAAA,UACrB,QAAQ,CAAC,QAAQ,UAAU,WAAW,UAAU,UAAU,OAAO;AAAA,QAClE;AAAA,QACA;AAAA,UACC,SAAS,QAAQ,UAAU;AAAA,UAC3B,YAAYA,WAAS;AAAA,UACrB,QAAQ,CAAC,QAAQ,UAAU,aAAa,UAAU,UAAU,OAAO;AAAA,QACpE;AAAA,QACA;AAAA,UACC,SAAS,QAAQ,UAAU;AAAA,UAC3B,YAAYA,WAAS;AAAA,UACrB,QAAQ;AAAA,YACP,UAAU,UAAU;AAAA,YACpB,UAAU,UAAU;AAAA,YACpB,QAAQ,UAAU;AAAA,UACnB;AAAA,QACD;AAAA,QACA;AAAA,UACC,SAAS,OAAO,UAAU;AAAA,UAC1B,YAAYA,WAAS;AAAA,UACrB,QAAQ,CAAC,QAAQ,UAAU,SAAS,QAAQ,UAAU,YAAY;AAAA,QACnE;AAAA,MACD;AAAA,IACD;AAEA,WAAO,MAAM,CAAC;AAEd,WAAO,UAAU;AACjB,WAAO,UAAU;AAAA,EAClB,SAAS,MAAM;AACd,WAAO,UAAU;AACjB,YAAQ,IAAI,IAAc;AAAA,EAC3B;AACA,SAAO;AACR;AAEA,IAAM,aAAuB;AAAA,EAC5B,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,MAAMC;AAAA,EACN,OAAOC;AACR;;;AC/eA;AAAA,EACC,WAAAC;AAAA,EAEA,UAAAC;AAAA,EAGA,QAAAC;AAAA,EACA,WAAAC;AAAA,EACA,aAAAC;AAAA,EACA,aAAAC;AAAA,EACA,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,YAAAC;AAAA,OACM;AAEP,IAAMC,SAAkB;AAAA,EACvB,UAAU;AAAA,EACV,QAAQ;AAAA;AAAA,IAEPN,UAAQ,MAAM,MAAM,MAAM,KAAK,KAAM,CAAC;AAAA,IACtCA,UAAQ,MAAM,MAAM,KAAM,KAAK,KAAM,CAAC;AAAA,IACtCA,UAAQ,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC;AAAA,IACjCA,UAAQ,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC;AAAA,IAC7BA,UAAQ,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC;AAAA,IAC7BE,WAAU,kBAAkB,CAAC,cAAc,UAAU,CAAC;AAAA,IACtDD,WAAU,UAAU,KAAK;AAAA,IACzBD,UAAQ,aAAa,IAAI,GAAG,GAAG,IAAI,CAAC;AAAA,IACpCA,UAAQ,cAAc,IAAI,GAAG,GAAG,IAAI,CAAC;AAAA,IACrCA,UAAQ,MAAM,MAAM,IAAI,GAAG,KAAM,CAAC;AAAA,IAClCC,WAAU,eAAe,KAAK;AAAA,IAC9BD,UAAQ,UAAU,MAAM,KAAK,GAAG,KAAM,CAAC;AAAA,IACvCA,UAAQ,YAAY,IAAI,GAAG,GAAG,GAAG,IAAI;AAAA,IACrCA,UAAQ,YAAY,IAAI,GAAG,GAAG,GAAG,IAAI;AAAA,IACrCE,WAAU,YAAY,CAAC,YAAY,YAAY,SAAS,SAAS,CAAC;AAAA,IAClEF,UAAQ,MAAM,MAAM,IAAI,GAAG,KAAM,CAAC;AAAA,IAClCC,WAAU,eAAe,KAAK;AAAA,IAC9BD,UAAQ,UAAU,MAAM,KAAK,GAAG,KAAM,CAAC;AAAA,IACvCA,UAAQ,YAAY,IAAI,GAAG,GAAG,GAAG,IAAI;AAAA,IACrCA,UAAQ,YAAY,IAAI,GAAG,GAAG,GAAG,IAAI;AAAA,IACrCE,WAAU,YAAY,CAAC,YAAY,YAAY,SAAS,SAAS,CAAC;AAAA,IAClEF,UAAQ,oBAAoB,KAAK,IAAI,GAAG,KAAK,GAAG;AAAA,IAChDA,UAAQ,eAAe,QAAQ,KAAK,KAAK,KAAM,CAAC;AAAA;AAAA,EACjD;AAAA,EACA,UAAU;AAAA,IACT,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,IAAI;AAAA,IACJ,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,UAAU;AAAA,IACV,UAAU;AAAA,IACV,IAAI;AAAA,IACJ,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,UAAU;AAAA,IACV,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,aAAa;AAAA,EACd;AAAA,EACA,KAAK;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA;AAAA,EACV;AACD;AAMA,SAASO,QAAM,GAAW,OAAyB;AAClD,MAAI;AACJ,QAAM,SAASJ,WAASG,OAAK,QAAQ;AACrC,QAAM,aAAaR,SAAO;AAC1B,QAAM,cAAcA,SAAO;AAC3B,SAAO,UAAU,GAAG,OAAO,QAAQ,aAAa,CAAC;AAAA;AACjD,MAAI;AACH,UAAM,gBAAiB,MAAM,KAAK,MAAM,KAAM,MAAM;AACpD,UAAM,cAAe,MAAM,cAAc,gBAAgB,MAAM,mBAAoB;AACnF,WAAO,UAAU,kBAAkBC,OAAK,aAAa,CAAC;AAAA;AACtD,WAAO,UAAU,gBAAgBA,OAAK,WAAW,CAAC;AAAA;AAClD,UAAM,eAAe,MAAM,KAAK,MAAM;AACtC,WAAO,UAAU,qBAAqB,YAAY;AAAA;AAClD,WAAO,UAAU,sBAAsBA,OAAK,eAAe,aAAa,CAAC;AAAA;AACzE,WAAO,UAAU,oBAAoBA,OAAK,eAAe,WAAW,CAAC;AAAA;AACrE,UAAM,UAAU,MAAM,mBAAmB,IAAI,MAAM,KAAK,MAAM;AAC9D,UAAM,aAAa,MAAM,mBAAmB,IAAI,MAAM,KAAK,MAAM;AACjE,UAAM,QAAQ,MAAM,mBAAmB,IAAI,MAAM,KAAK,MAAM;AAC5D,UAAM,gBAAgB,MAAM,mBAAmB,IAAI,MAAM,cAAc,MAAM;AAC7E,UAAM,WAAW,MAAM,mBAAmB,IAAI,MAAM,SAAS,MAAM;AACnE,UAAM,aAAa,MAAM,mBAAmB,IAAI,MAAM,WAAW,MAAM;AACvE,UAAM,aAAa,MAAM,mBAAmB,IAAI,MAAM,WAAW,MAAM;AACvE,UAAM,aAAa,MAAM,mBAAmB,IAAI,MAAM,WAAW,MAAM;AACvE,UAAM,WAAW,MAAM,mBAAmB,IAAI,MAAM,KAAK,MAAM;AAC/D,UAAM,mBAAmB,MAAM,mBAAmB,IAAI,MAAM,cAAc,MAAM;AAChF,UAAM,cAAc,MAAM,mBAAmB,IAAI,MAAM,SAAS,MAAM;AACtE,UAAM,gBAAgB,MAAM,mBAAmB,IAAI,MAAM,WAAW,MAAM;AAC1E,UAAM,gBAAgB,MAAM,mBAAmB,IAAI,MAAM,WAAW,MAAM;AAC1E,UAAM,gBAAgB,MAAM,mBAAmB,IAAI,MAAM,WAAW,MAAM;AAC1E,UAAM,SAAmB,CAAC;AAC1B,aAAS,IAAI,GAAG,IAAI,SAAS,KAAK;AACjC,YAAM,SAAS,IAAI,KAAK;AACxB,YAAM,SAAS,MAAM,SAAS,aAAa,QAAQ;AACnD,aAAO,KAAK,MAAM;AAAA,IACnB;AACA,WAAO,CAAC,IAAI,MAAM;AAClB,WAAO,OAAO,SAAS,CAAC,IAAI,MAAM;AAClC,QAAI,UAAU,GAAG;AAChB,aAAO,CAAC,IAAI,MAAM;AAClB,aAAO,OAAO,SAAS,CAAC,IAAI,MAAM;AAAA,IACnC;AACA,QAAI,UAAU;AACd,WAAO,QAAQ,CAAC,WAAW;AAC1B,iBAAW;AAAA,IACZ,CAAC;AACD,WAAO,UAAU,wBAAwB,OAAO,KAAKA;AAAA,MACnD,MAAM,UAAW;AAAA,IACnB,CAAC;AAAA;AACD,WAAO,UAAU,yBAAyBA,OAAK,UAAU,aAAa,CAAC;AAAA;AACvE,WAAO,UAAU,uBAAuBA,OAAK,UAAU,WAAW,CAAC;AAAA;AACnE,UAAM,QAAkB,CAAC;AACzB,aAAS,IAAI,GAAG,IAAI,UAAU,GAAG,KAAK;AACrC,UAAI,SAAS;AACb,UAAI,kBAAkB,GAAG;AACxB,cAAM,QAAQ,UAAU,IAAI,UAAU,IAAI;AAC1C,cAAM,SAAS,aAAc,IAAI,aAAc,SAAS;AACxD,gBAAQ,YAAY;AAAA,UACnB,KAAK;AACJ,sBAAW,YAAY,IAAI,KAAK,IAAI,QAAQ,IAAI,KAAK,EAAE,KAAM;AAC7D;AAAA,UACD,KAAK;AACJ,sBAAU,YAAY,IAAI,IAAI,KAAK,IAAI,QAAQ,GAAG;AAClD;AAAA,UACD,KAAK;AACJ,sBAAU,WAAW;AACrB;AAAA,UACD,KAAK;AACJ,sBAAU,YAAY,IAAI;AAC1B;AAAA,UACD;AACC,sBAAU;AAAA,QACZ;AAAA,MACD;AACA,YAAM,KAAK,MAAM;AAAA,IAClB;AACA,QAAI,aAAa;AACjB,UAAM,aAAuB,CAAC;AAC9B,eAAW,KAAK,CAAC;AACjB,UAAM,QAAQ,CAAC,WAAW;AACzB,oBAAc;AACd,iBAAW,KAAK,UAAU;AAAA,IAC3B,CAAC;AACD,UAAM,WAAqB,CAAC;AAC5B,aAAS,IAAI,GAAG,IAAI,aAAa,GAAG,KAAK;AACxC,UAAI,SAAS;AACb,UAAI,qBAAqB,GAAG;AAC3B,cAAM,QAAQ,aAAa,IAAI,aAAa,IAAI;AAChD,cAAM,SAAS,gBAAiB,IAAI,gBAAiB,SAAS;AAC9D,gBAAQ,eAAe;AAAA,UACtB,KAAK;AACJ,sBAAW,eAAe,IAAI,KAAK,IAAI,QAAQ,IAAI,KAAK,EAAE,KAAM;AAChE;AAAA,UACD,KAAK;AACJ,sBAAU,eAAe,IAAI,IAAI,KAAK,IAAI,QAAQ,GAAG;AACrD;AAAA,UACD,KAAK;AACJ,sBAAU,cAAc;AACxB;AAAA,UACD,KAAK;AACJ,sBAAU,eAAe,IAAI;AAC7B;AAAA,UACD;AACC,sBAAU;AAAA,QACZ;AAAA,MACD;AACA,eAAS,KAAK,MAAM;AAAA,IACrB;AACA,QAAI,gBAAgB;AACpB,UAAM,gBAA0B,CAAC;AACjC,kBAAc,KAAK,CAAC;AACpB,aAAS,QAAQ,CAAC,WAAW;AAC5B,uBAAiB;AACjB,oBAAc,KAAK,aAAa;AAAA,IACjC,CAAC;AACD,QAAI,iBAAiB;AACrB,QAAI,eAAe;AACnB,QAAI,MAAM,mBAAmB,GAAG;AAE/B,uBAAiB,UAAU,MAAM,KAAK;AACtC,qBAAe,aAAa,MAAM,KAAK;AAAA,IACxC,OAAO;AAEN,uBAAiB,aAAa,MAAM,KAAK;AACzC,qBAAe,UAAU,MAAM,KAAK;AAAA,IACrC;AACA,UAAM,QAAS,iBAAiB,eAAgB,MAAM;AACtD,WAAO,UAAU,4BAA4BA,OAAK,iBAAiB,GAAI,CAAC;AAAA;AACxE,WAAO,UAAU,2BAA2BA,OAAK,eAAe,GAAI,CAAC;AAAA;AACrE,WAAO,UAAU,gBAAgBA,OAAK,KAAK,CAAC;AAAA;AAC5C,WAAO,UAAU,oBAAoBA,OAAM,MAAM,UAAU,gBAAiB,KAAK,CAAC;AAAA;AAClF,UAAM,KAAK,CAAC,iBAAiB;AAC7B,UAAM,KAAK,CAAC,eAAe;AAC3B,sBAAkB,SAAU,IAAY,IAAsB;AAC7D,YAAM,gBAAgBF,UAAQ,IAAI,EAAE,EAClC,cAAc,KAAK,MAAM,IAAI,EAAE,EAC/B,cAAc,KAAK,MAAM,IAAI,KAAK,MAAM,EAAE,EAC1C,cAAc,IAAI,KAAK,MAAM,EAAE,EAC/B,eAAe;AACjB,aAAO;AAAA,IACR;AAEA,UAAM,iBAA6B,CAAC;AACpC,WAAO,QAAQ,CAAC,QAAQ,WAAW;AAClC,YAAM,QAAQ,aAAa,UAAU;AACrC,YAAM,SAAS,KAAK,OAAO,aAAa,UAAU,CAAC;AACnD,eAAS,OAAO,GAAG,OAAO,QAAQ,QAAQ;AACzC,YAAI,KAAK;AACT,YAAI,KAAK;AACT,YAAI,MAAM,mBAAmB,GAAG;AAE/B,eAAK,KAAK,SAAS,MAAM,KAAK,WAAW,MAAM;AAC/C,eAAK,MAAM,SAAS,QAAQ,MAAM,KAAK,cAAc,SAAS,IAAI;AAClE,cAAI,SAAS,GAAG;AACf,mBACE,MAAM,KACN,cAAc,SAAS,OAAO,CAAC,IAC/B,cAAc,SAAS,IAAI,KAC5B;AAAA,UACF;AAAA,QACD,OAAO;AAEN,eAAK,KAAK,SAAS,MAAM,KAAK,WAAW,MAAM;AAC/C,eAAK,MAAM,SAAS,QAAQ,MAAM,KAAK,cAAc,SAAS,IAAI;AAClE,cAAI,SAAS,GAAG;AACf,mBACE,MAAM,KACN,cAAc,SAAS,OAAO,CAAC,IAC/B,cAAc,SAAS,IAAI,KAC5B;AAAA,UACF;AAAA,QACD;AACA,uBAAe,KAAK,CAAC,IAAI,EAAE,CAAC;AAAA,MAC7B;AAAA,IACD,CAAC;AACD,eAAW,OAAO,gBAAgB;AACjC,iBAAW,QAAQ,gBAAgB,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AAAA,IACnD;AAEA,gBAAY,QAAQ,gBAAgB,GAAG,CAAC,CAAC;AAEzC,WAAO,MAAM;AAAA,MACZ,aAAa;AAAA,MACb,cAAc;AAAA,IACf;AACA,UAAM,aAAa,OAAO;AAC1B,WAAO,MAAM;AAAA,MACZ,UAAU,eAAe,IAAI,CAAC,MAAM,QAAQ;AAC3C,cAAM,QAAkB;AAAA,UACvB,SAAS,UAAU,UAAU,UAAU,GAAG;AAAA,UAC1C,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeO,WAAS;AAAA,UACxB,QAAQ,MAAM;AAAA,UACd,QAAQ,CAAC,GAAG,GAAG,CAAC;AAAA,UAChB,WAAW,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC;AAAA,QAChC;AACA,eAAO;AAAA,MACR,CAAC;AAAA,MACD,SAAS;AAAA,QACR;AAAA,UACC,SAAS,OAAO,UAAU;AAAA;AAAA,UAE1B,YAAYC,WAAS;AAAA,UACrB,QAAQ,eAAe,IAAI,CAAC,MAAM,QAAQ;AACzC,kBAAM,UAAU,UAAU,UAAU,UAAU,GAAG;AACjD,mBAAO;AAAA,UACR,CAAC;AAAA,QACF;AAAA,MACD;AAAA,IACD;AAEA,WAAO,MAAM,CAAC;AAEd,WAAO,UAAU;AACjB,WAAO,UAAU;AAAA,EAClB,SAAS,MAAM;AACd,WAAO,UAAU;AACjB,YAAQ,IAAI,IAAc;AAAA,EAC3B;AACA,SAAO;AACR;AAEA,IAAM,aAAuB;AAAA,EAC5B,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,MAAMC;AAAA,EACN,OAAOC;AACR;;;AC1TA,SAAS,YAAAC,WAAU,SAAAC,QAAO,UAAAC,UAAQ,WAAAC,WAAS,YAAAC,kBAAgB;AAO3D,IAAMC,SAAkB;AAAA,EACvB,UAAU;AAAA,EACV,QAAQ;AAAA;AAAA,IAEPF,UAAQ,SAAS,UAAU,IAAI,GAAG,IAAI,CAAC;AAAA,IACvCA,UAAQ,oBAAoB,MAAM,GAAG,KAAK,GAAG,GAAG;AAAA,IAChDA,UAAQ,mBAAmB,UAAU,KAAK,KAAK,KAAK,IAAI;AAAA,EACzD;AAAA,EACA,UAAU;AAAA,IACT,OAAO;AAAA,IACP,oBAAoB;AAAA,IACpB,mBAAmB;AAAA,EACpB;AAAA,EACA,KAAK;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,EACV;AACD;AAEA,SAASG,QAAM,GAAW,OAAyB;AAClD,QAAM,SAASF,WAASC,OAAK,QAAQ;AACrC,SAAO,UAAU,GAAG,OAAO,QAAQ,aAAa,CAAC;AAAA;AACjD,MAAI;AACH,UAAM,SAASH,SAAO;AAEtB,UAAM,KAAKD,OAAM,IAAI,EAAE;AACvB,UAAM,KAAKA,OAAM,IAAI,EAAE;AAEvB,WAAO,SAAS,EAAE;AAClB,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC5B,aAAO;AAAA,QACN,GACE,MAAM,IAAI,MAAM,kBAAkB,IAAI,MAAM,iBAAiB,IAAI,CAAC,EAClE,OAAO,IAAI,IAAID,UAAS,MAAM,KAAK,IAAK,IAAI,KAAK,KAAM,IAAIK,OAAK,IAAI,IAAI;AAAA,MAC3E;AAAA,IACD;AACA,WAAO,MAAM,EAAE,KAAK,OAAO;AAC3B,WAAO,UAAU;AACjB,WAAO,UAAU;AAAA,EAClB,SAAS,MAAM;AACd,WAAO,UAAU;AACjB,YAAQ,IAAI,IAAc;AAAA,EAC3B;AACA,SAAO;AACR;AAEA,IAAM,aAAuB;AAAA,EAC5B,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,MAAMA;AAAA,EACN,OAAOC;AACR;;;AC3DA,SAAS,SAAAC,QAAO,UAAAC,UAAQ,WAAAC,WAAS,YAAAC,kBAAgB;AAEjD,IAAMC,SAAkB;AAAA,EACvB,UAAU;AAAA,EACV,QAAQ;AAAA;AAAA,IAEPF,UAAQ,SAAS,MAAM,IAAI,GAAG,IAAI,GAAG;AAAA,IACrCA,UAAQ,UAAU,MAAM,IAAI,GAAG,IAAI,GAAG;AAAA,EACvC;AAAA,EACA,UAAU;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,EACT;AAAA,EACA,KAAK;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,EACV;AACD;AAEA,SAASG,QAAM,GAAW,OAAyB;AAClD,QAAM,SAASF,WAASC,OAAK,QAAQ;AACrC,SAAO,UAAU,GAAG,OAAO,QAAQ,aAAa,CAAC;AAAA;AACjD,MAAI;AACH,UAAM,SAASH,SAAO;AACtB,UAAM,KAAKD,OAAM,IAAI,EAAE;AACvB,UAAM,KAAKA,OAAM,KAAK,MAAM,OAAO,EAAE;AACrC,UAAM,KAAKA,OAAM,KAAK,MAAM,OAAO,KAAK,MAAM,MAAM;AACpD,UAAM,KAAKA,OAAM,IAAI,KAAK,MAAM,MAAM;AACtC,UAAM,QAAS,IAAI,KAAK,KAAM;AAC9B,WAAO,SAAS,EAAE;AAClB,WAAO,SAAS,GAAG,OAAO,IAAI,KAAK,CAAC;AACpC,WAAO,SAAS,GAAG,OAAO,IAAI,KAAK,CAAC;AACpC,WAAO,SAAS,GAAG,OAAO,IAAI,KAAK,CAAC;AACpC,WAAO,MAAM,EAAE,KAAK,OAAO;AAC3B,WAAO,UAAU;AACjB,WAAO,UAAU;AAAA,EAClB,SAAS,MAAM;AACd,WAAO,UAAU;AACjB,YAAQ,IAAI,IAAc;AAAA,EAC3B;AACA,SAAO;AACR;AAEA,IAAM,eAAyB;AAAA,EAC9B,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,MAAMI;AAAA,EACN,OAAOC;AACR;;;ACzCA;AAAA,EACC,WAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,UAAAC;AAAA,EAIA,WAAAC;AAAA,EAGA,YAAAC;AAAA,OAGM;AAEP,IAAMC,SAAkB;AAAA,EACvB,UAAU;AAAA,EACV,QAAQ;AAAA;AAAA,IAEPF,UAAQ,MAAM,MAAM,KAAM,KAAK,KAAO,EAAE;AAAA,IACxCA,UAAQ,MAAM,MAAM,KAAM,KAAK,KAAO,EAAE;AAAA,IACxCA,UAAQ,UAAU,MAAM,KAAM,KAAK,KAAO,EAAE;AAAA,EAC7C;AAAA,EACA,UAAU;AAAA,IACT,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,QAAQ;AAAA,EACT;AAAA,EACA,KAAK;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA;AAAA,EACV;AACD;AAEA,SAASG,QAAM,GAAW,OAAyB;AAClD,QAAM,SAASF,WAASC,OAAK,QAAQ;AACrC,QAAM,UAAUH,SAAO;AACvB,SAAO,UAAU,GAAG,OAAO,QAAQ,aAAa,CAAC;AAAA;AACjD,MAAI;AAEH,UAAM,cAAcF,UAAQ,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,KAAK,CAAC,EACtD,cAAc,MAAM,KAAK,GAAG,CAAC,MAAM,KAAK,CAAC,EACzC,cAAc,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,EACxC,cAAc,CAAC,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,EACzC,eAAe;AACjB,YAAQ,QAAQ,WAAW;AAC3B,YAAQ,QAAQC,gBAAc,GAAG,GAAG,MAAM,MAAM,CAAC;AAEjD,WAAO,MAAM;AAAA,MACZ,UAAU;AAAA,IACX;AAKA,WAAO,MAAM,CAAC;AAEd,WAAO,UAAU;AACjB,WAAO,UAAU;AAAA,EAClB,SAAS,MAAM;AACd,WAAO,UAAU;AACjB,YAAQ,IAAI,IAAc;AAAA,EAC3B;AACA,SAAO;AACR;AAEA,IAAM,qBAA+B;AAAA,EACpC,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,MAAMI;AAAA,EACN,OAAOC;AACR;;;AChFA,SAAS,YAAAC,WAAU,SAAAC,QAAO,UAAAC,UAAQ,WAAAC,WAAS,YAAAC,kBAAgB;AAE3D,IAAMC,SAAkB;AAAA,EACvB,UAAU;AAAA,EACV,QAAQ;AAAA;AAAA,IAEPF,UAAQ,OAAO,MAAM,IAAI,MAAM,KAAK,CAAC;AAAA,IACrCA,UAAQ,OAAO,MAAM,IAAI,MAAM,KAAK,CAAC;AAAA,IACrCA,UAAQ,OAAO,UAAU,IAAI,MAAM,KAAK,CAAC;AAAA,IACzCA,UAAQ,OAAO,MAAM,IAAI,GAAG,KAAK,CAAC;AAAA,IAClCA,UAAQ,cAAc,UAAU,IAAI,MAAM,KAAK,CAAC;AAAA,IAChDA,UAAQ,aAAa,UAAU,KAAK,KAAK,GAAG,GAAG;AAAA,EAChD;AAAA,EACA,UAAU;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,WAAW;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA;AAAA,EACV;AACD;AAEA,SAASG,QAAM,GAAW,OAAyB;AAClD,QAAM,SAASF,WAASC,OAAK,QAAQ;AACrC,SAAO,UAAU,GAAG,OAAO,QAAQ,aAAa,CAAC;AAAA;AACjD,MAAI;AACH,UAAM,SAASH,SAAO;AACtB,UAAM,KAAKD,OAAM,MAAM,KAAK,MAAM,MAAM,CAAC;AACzC,UAAM,KAAKA,OAAM,GAAG,CAAC,EAAE,SAASD,UAAS,MAAM,GAAG,GAAG,MAAM,GAAG;AAC9D,UAAM,KAAK,GAAG,WAAWA,UAAS,MAAM,UAAU,CAAC;AACnD,UAAM,KAAK,GAAG,UAAU,MAAM,SAAS;AACvC,WAAO,SAAS,EAAE;AAClB,WAAO,SAAS,EAAE;AAClB,WAAO,SAAS,EAAE;AAClB,WAAO,SAAS,EAAE;AAClB,WAAO,MAAM,EAAE,KAAK,OAAO;AAC3B,WAAO,UAAU;AACjB,WAAO,UAAU;AAAA,EAClB,SAAS,MAAM;AACd,WAAO,UAAU;AACjB,YAAQ,IAAI,IAAc;AAAA,EAC3B;AACA,SAAO;AACR;AAEA,IAAM,kBAA4B;AAAA,EACjC,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,MAAMK;AAAA,EACN,OAAOC;AACR;;;ACxDA,SAAS,SAAAC,QAAO,UAAAC,UAAQ,WAAAC,WAAS,YAAAC,kBAAgB;AAEjD,IAAMC,SAAkB;AAAA,EACvB,UAAU;AAAA,EACV,QAAQ;AAAA;AAAA,IAEPF,UAAQ,OAAO,MAAM,IAAI,MAAM,KAAK,CAAC;AAAA,IACrCA,UAAQ,OAAO,MAAM,IAAI,MAAM,KAAK,CAAC;AAAA,IACrCA,UAAQ,OAAO,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACtCA,UAAQ,OAAO,MAAM,IAAI,MAAM,KAAK,CAAC;AAAA,IACrCA,UAAQ,OAAO,MAAM,IAAI,MAAM,KAAK,CAAC;AAAA,IACrCA,UAAQ,OAAO,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACtCA,UAAQ,QAAQ,MAAM,IAAI,GAAG,KAAK,CAAC;AAAA,EACpC;AAAA,EACA,UAAU;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,EACP;AAAA,EACA,KAAK;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA;AAAA,EACV;AACD;AAEA,SAASG,QAAM,GAAW,OAAyB;AAClD,QAAM,SAASF,WAASC,OAAK,QAAQ;AACrC,SAAO,UAAU,GAAG,OAAO,QAAQ,aAAa,CAAC;AAAA;AACjD,MAAI;AACH,UAAM,SAASH,SAAO;AACtB,UAAM,KAAKD,OAAM,MAAM,KAAK,MAAM,MAAM,CAAC;AACzC,UAAM,KAAKA,OAAM,MAAM,KAAK,MAAM,GAAG;AACrC,UAAM,KAAKA,OAAM,MAAM,KAAK,MAAM,GAAG;AACrC,UAAM,QAAQ,GAAG,YAAY,EAAE;AAC/B,UAAM,QAAQ,GAAG,iBAAiB,IAAI,MAAM,MAAM,EAAE;AACpD,WAAO,SAAS,EAAE;AAClB,WAAO,SAAS,EAAE;AAClB,WAAO,SAAS,EAAE;AAClB,WAAO,SAAS,KAAK;AACrB,WAAO,SAAS,KAAK;AACrB,WAAO,MAAM,EAAE,KAAK,OAAO;AAC3B,WAAO,UAAU;AACjB,WAAO,UAAU;AAAA,EAClB,SAAS,MAAM;AACd,WAAO,UAAU;AACjB,YAAQ,IAAI,IAAc;AAAA,EAC3B;AACA,SAAO;AACR;AAEA,IAAM,kBAA4B;AAAA,EACjC,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,MAAMI;AAAA,EACN,OAAOC;AACR;;;AC5DA,SAAS,SAAAC,QAAO,MAAM,QAAQ,UAAAC,UAAQ,WAAAC,WAAS,YAAAC,kBAAgB;AAE/D,IAAMC,SAAkB;AAAA,EACvB,UAAU;AAAA,EACV,QAAQ;AAAA;AAAA,IAEPF,UAAQ,OAAO,MAAM,IAAI,MAAM,KAAK,CAAC;AAAA,IACrCA,UAAQ,OAAO,MAAM,IAAI,MAAM,KAAK,CAAC;AAAA,IACrCA,UAAQ,OAAO,MAAM,IAAI,MAAM,KAAK,CAAC;AAAA,IACrCA,UAAQ,OAAO,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACtCA,UAAQ,OAAO,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACtCA,UAAQ,OAAO,MAAM,IAAI,MAAM,KAAK,CAAC;AAAA,EACtC;AAAA,EACA,UAAU;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACN;AAAA,EACA,KAAK;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA;AAAA,EACV;AACD;AAEA,SAASG,QAAM,GAAW,OAAyB;AAClD,QAAM,SAASF,WAASC,OAAK,QAAQ;AACrC,SAAO,UAAU,GAAG,OAAO,QAAQ,aAAa,CAAC;AAAA;AACjD,MAAI;AACH,UAAM,SAASH,SAAO;AACtB,UAAM,KAAKD,OAAM,MAAM,KAAK,MAAM,MAAM,CAAC;AACzC,UAAM,KAAKA,OAAM,MAAM,KAAK,MAAM,GAAG;AACrC,UAAM,KAAKA,OAAM,MAAM,KAAK,MAAM,GAAG;AACrC,WAAO,SAAS,EAAE;AAClB,WAAO,SAAS,EAAE;AAClB,WAAO,SAAS,EAAE;AAClB,UAAM,KAAK,KAAK,GAAG,GAAG,CAAC,EAAE,cAAc,IAAI,EAAE;AAC7C,WAAO,QAAQ,EAAE;AAEjB,WAAO,SAASA,OAAM,GAAG,qBAAqB,GAAG,CAAC,CAAC;AACnD,WAAO,SAASA,OAAM,GAAG,GAAG,qBAAqB,CAAC,CAAC;AACnD,UAAM,KAAK,GAAG,YAAY;AAC1B,WAAO,SAAS,EAAE;AAClB,UAAM,KAAKA,OAAM,GAAG,CAAC;AACrB,QAAI,CAAC,GAAG,QAAQ,EAAE,GAAG;AACpB,YAAM,KAAK,OAAO,IAAI,EAAE;AACxB,aAAO,QAAQ,EAAE;AAAA,IAClB;AACA,WAAO,QAAQ,GAAG,eAAe,EAAE,CAAC;AACpC,WAAO,QAAQ,GAAG,aAAa,EAAE,CAAC;AAClC,WAAO,SAAS,GAAG,aAAa,EAAE,CAAC;AACnC,WAAO,MAAM,EAAE,KAAK,OAAO;AAC3B,WAAO,UAAU,kBAAkB,GAAG,gBAAgB,EAAE,CAAC;AAAA;AACzD,WAAO,UAAU;AACjB,WAAO,UAAU;AAAA,EAClB,SAAS,MAAM;AACd,WAAO,UAAU;AACjB,YAAQ,IAAI,IAAc;AAAA,EAC3B;AACA,SAAO;AACR;AAEA,IAAM,iBAA2B;AAAA,EAChC,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,MAAMI;AAAA,EACN,OAAOC;AACR;;;ACtEA,SAAS,YAAAC,WAAU,SAAAC,QAAO,QAAAC,OAAM,UAAAC,UAAQ,WAAAC,WAAS,YAAAC,kBAAgB;AAEjE,IAAMC,SAAkB;AAAA,EACvB,UAAU;AAAA,EACV,QAAQ;AAAA;AAAA,IAEPF,UAAQ,QAAQ,MAAM,IAAI,MAAM,KAAK,CAAC;AAAA,IACtCA,UAAQ,QAAQ,MAAM,IAAI,MAAM,KAAK,CAAC;AAAA,IACtCA,UAAQ,QAAQ,UAAU,IAAI,MAAM,KAAK,CAAC;AAAA,IAC1CA,UAAQ,QAAQ,MAAM,IAAI,MAAM,KAAK,CAAC;AAAA,IACtCA,UAAQ,QAAQ,MAAM,IAAI,MAAM,KAAK,CAAC;AAAA,IACtCA,UAAQ,QAAQ,UAAU,IAAI,MAAM,KAAK,CAAC;AAAA,IAC1CA,UAAQ,OAAO,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACtCA,UAAQ,OAAO,MAAM,IAAI,MAAM,KAAK,CAAC;AAAA,EACtC;AAAA,EACA,UAAU;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,EACN;AAAA,EACA,KAAK;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA;AAAA,EACV;AACD;AAEA,SAASG,QAAM,GAAW,OAAyB;AAClD,QAAM,SAASF,WAASC,OAAK,QAAQ;AACrC,SAAO,UAAU,GAAG,OAAO,QAAQ,aAAa,CAAC;AAAA;AACjD,MAAI;AACH,UAAM,SAASH,SAAO;AACtB,UAAM,KAAKF,OAAM,MAAM,MAAM,MAAM,IAAI;AACvC,UAAM,KAAKA,OAAM,MAAM,MAAM,MAAM,IAAI;AACvC,UAAM,KAAKA,OAAM,MAAM,KAAK,MAAM,GAAG;AACrC,WAAO,SAAS,EAAE;AAClB,WAAO,SAAS,EAAE;AAClB,WAAO,SAAS,EAAE;AAClB,UAAM,KAAKC,MAAK,MAAM,MAAM,MAAM,MAAMF,UAAS,MAAM,OAAO,CAAC,CAAC;AAChE,UAAM,KAAKE,MAAK,MAAM,MAAM,MAAM,MAAMF,UAAS,MAAM,IAAI,CAAC;AAC5D,WAAO,QAAQ,EAAE;AACjB,WAAO,QAAQ,EAAE;AACjB,WAAO,SAAS,GAAG,aAAa,EAAE,CAAC;AACnC,WAAO,SAAS,GAAG,aAAa,EAAE,CAAC;AACnC,WAAO,UAAU,kBAAkB,GAAG,gBAAgB,EAAE,CAAC;AAAA;AACzD,WAAO,SAAS,GAAG,aAAa,EAAE,CAAC;AACnC,WAAO,UAAU,kBAAkB,GAAG,gBAAgB,EAAE,CAAC;AAAA;AACzD,UAAMQ,YAAW,GAAG,SAAS,IAAI,EAAE;AACnC,UAAM,SAASP,OAAMO,UAAS,IAAIA,UAAS,EAAE,EAAE,eAAeA,UAAS,IAAI,EAAE;AAC7E,WAAO,SAAS,MAAM;AACtB,WAAO,MAAM,EAAE,KAAK,OAAO;AAC3B,WAAO,UAAU;AACjB,WAAO,UAAU;AAAA,EAClB,SAAS,MAAM;AACd,WAAO,UAAU;AACjB,YAAQ,IAAI,IAAc;AAAA,EAC3B;AACA,SAAO;AACR;AAEA,IAAM,iBAA2B;AAAA,EAChC,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,MAAMF;AAAA,EACN,OAAOC;AACR;;;ACtEA,SAAS,SAAAE,QAAO,UAAU,cAAc,UAAAC,UAAQ,WAAAC,WAAS,YAAAC,kBAAgB;AAEzE,IAAMC,SAAkB;AAAA,EACvB,UAAU;AAAA,EACV,QAAQ;AAAA;AAAA,IAEPF,UAAQ,OAAO,MAAM,IAAI,MAAM,KAAK,CAAC;AAAA,IACrCA,UAAQ,OAAO,MAAM,IAAI,MAAM,KAAK,CAAC;AAAA,IACrCA,UAAQ,OAAO,MAAM,IAAI,MAAM,KAAK,CAAC;AAAA,IACrCA,UAAQ,OAAO,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACtCA,UAAQ,OAAO,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACtCA,UAAQ,OAAO,MAAM,IAAI,MAAM,KAAK,CAAC;AAAA,EACtC;AAAA,EACA,UAAU;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACN;AAAA,EACA,KAAK;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA;AAAA,EACV;AACD;AAEA,SAASG,QAAM,GAAW,OAAyB;AAClD,QAAM,SAASF,WAASC,OAAK,QAAQ;AACrC,SAAO,UAAU,GAAG,OAAO,QAAQ,aAAa,CAAC;AAAA;AACjD,MAAI;AACH,UAAM,SAASH,SAAO;AACtB,UAAM,KAAKD,OAAM,MAAM,KAAK,MAAM,MAAM,CAAC;AACzC,UAAM,KAAKA,OAAM,MAAM,KAAK,MAAM,GAAG;AACrC,UAAM,KAAKA,OAAM,MAAM,KAAK,MAAM,GAAG;AACrC,WAAO,SAAS,EAAE;AAClB,WAAO,SAAS,EAAE;AAClB,WAAO,SAAS,EAAE;AAClB,UAAM,KAAK,SAAS,IAAI,EAAE;AAC1B,WAAO,QAAQ,EAAE;AACjB,UAAM,UAAU,aAAa,IAAI,IAAI,EAAE;AACvC,WAAO,SAAS,OAAO;AACvB,WAAO,MAAM,EAAE,KAAK,OAAO;AAC3B,WAAO,UAAU;AACjB,WAAO,UAAU;AAAA,EAClB,SAAS,MAAM;AACd,WAAO,UAAU;AACjB,YAAQ,IAAI,IAAc;AAAA,EAC3B;AACA,SAAO;AACR;AAEA,IAAM,iBAA2B;AAAA,EAChC,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,MAAMI;AAAA,EACN,OAAOC;AACR;;;AC1DA,SAAS,YAAAC,WAAU,SAAAC,SAAO,QAAQ,UAAAC,UAAQ,WAAAC,WAAS,YAAAC,kBAAgB;AAEnE,IAAMC,SAAkB;AAAA,EACvB,UAAU;AAAA,EACV,QAAQ;AAAA;AAAA,IAEPF,UAAQ,OAAO,MAAM,IAAI,MAAM,KAAK,CAAC;AAAA,IACrCA,UAAQ,OAAO,MAAM,IAAI,MAAM,KAAK,CAAC;AAAA,IACrCA,UAAQ,OAAO,MAAM,IAAI,MAAM,KAAK,CAAC;AAAA,IACrCA,UAAQ,OAAO,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACtCA,UAAQ,OAAO,UAAU,IAAI,MAAM,KAAK,CAAC;AAAA,IACzCA,UAAQ,OAAO,MAAM,IAAI,GAAG,KAAK,CAAC;AAAA,IAClCA,UAAQ,OAAO,UAAU,IAAI,MAAM,KAAK,CAAC;AAAA,IACzCA,UAAQ,OAAO,MAAM,IAAI,GAAG,KAAK,CAAC;AAAA,EACnC;AAAA,EACA,UAAU;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACN;AAAA,EACA,KAAK;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA;AAAA,EACV;AACD;AAEA,SAASG,QAAM,GAAW,OAAyB;AAClD,QAAM,SAASF,WAASC,OAAK,QAAQ;AACrC,SAAO,UAAU,GAAG,OAAO,QAAQ,aAAa,CAAC;AAAA;AACjD,MAAI;AACH,UAAM,SAASH,SAAO;AACtB,UAAM,KAAKD,QAAM,MAAM,KAAK,MAAM,MAAM,CAAC;AACzC,UAAM,KAAKA,QAAM,MAAM,KAAK,MAAM,GAAG;AACrC,UAAM,KAAK,OAAOD,UAAS,MAAM,GAAG,GAAG,MAAM,KAAK,EAAE;AACpD,UAAM,KAAK,OAAOA,UAAS,MAAM,GAAG,GAAG,MAAM,KAAK,EAAE;AACpD,WAAO,SAAS,EAAE;AAClB,WAAO,SAAS,EAAE;AAClB,WAAO,UAAU,EAAE;AACnB,WAAO,UAAU,EAAE;AACnB,UAAM,KAAK,GAAG,IAAI,EAAE;AACpB,UAAM,KAAK,GAAG,eAAe,EAAE;AAC/B,WAAO,UAAU,EAAE;AACnB,WAAO,SAAS,EAAE;AAClB,WAAO,MAAM,EAAE,KAAK,OAAO;AAC3B,WAAO,UAAU;AACjB,WAAO,UAAU;AAAA,EAClB,SAAS,MAAM;AACd,WAAO,UAAU;AACjB,YAAQ,IAAI,IAAI;AAAA,EACjB;AACA,SAAO;AACR;AAEA,IAAM,mBAA6B;AAAA,EAClC,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,MAAMK;AAAA,EACN,OAAOC;AACR;;;AChEA,SAAS,WAAAC,WAAS,iBAAAC,iBAAe,UAAAC,UAAQ,WAAAC,WAAS,YAAAC,kBAAgB;AAElE,IAAMC,SAAkB;AAAA,EACvB,UAAU;AAAA,EACV,QAAQ;AAAA;AAAA,IAEPF,UAAQ,MAAM,MAAM,IAAI,IAAI,KAAK,CAAC;AAAA,IAClCA,UAAQ,MAAM,MAAM,IAAI,IAAI,KAAK,CAAC;AAAA,IAClCA,UAAQ,MAAM,MAAM,KAAK,IAAI,KAAK,CAAC;AAAA,IACnCA,UAAQ,MAAM,MAAM,IAAI,IAAI,KAAK,CAAC;AAAA,IAClCA,UAAQ,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC;AAAA,IACjCA,UAAQ,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC;AAAA,EAClC;AAAA,EACA,UAAU;AAAA,IACT,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACL;AAAA,EACA,KAAK;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA;AAAA,EACV;AACD;AAEA,SAASG,QAAM,GAAW,OAAyB;AAClD,QAAM,SAASF,WAASC,OAAK,QAAQ;AACrC,SAAO,UAAU,GAAG,OAAO,QAAQ,aAAa,CAAC;AAAA;AACjD,MAAI;AACH,UAAM,SAASH,SAAO;AACtB,UAAM,KAAK,MAAM;AACjB,UAAM,KAAK,MAAM;AACjB,UAAM,KAAK,MAAM;AACjB,UAAM,KAAK,MAAM;AACjB,UAAM,KAAK,MAAM;AACjB,UAAM,KAAK,MAAM;AACjB,UAAM,KAAK,IAAI,KAAK,IAAI;AACxB,UAAM,MAAM,KAAK;AACjB,UAAM,KAAK,KAAK;AAChB,UAAM,MAAM,IAAI,KAAK;AACrB,UAAM,KAAK,KAAK;AAChB,UAAM,KAAK,KAAK,IAAI;AACpB,UAAM,OAAOF,UAAQ,GAAG,CAAC;AACzB,SAAK,cAAc,IAAI,CAAC;AACxB,SAAK,cAAc,IAAI,EAAE;AACzB,SAAK,cAAc,GAAG,EAAE;AACxB,SAAK,eAAe;AACpB,SAAK,MAAM;AACX,WAAO,QAAQ,IAAI;AACnB,WAAO,QAAQC,gBAAc,KAAK,IAAI,EAAE,CAAC;AACzC,WAAO,QAAQA,gBAAc,KAAK,IAAI,KAAK,CAAC,CAAC;AAC7C,WAAO,QAAQA,gBAAc,KAAK,IAAI,EAAE,CAAC;AACzC,UAAM,OAAOA,gBAAc,KAAK,IAAI,IAAI,IAAI,EAAE;AAC9C,SAAK,MAAM;AACX,WAAO,UAAU,IAAI;AACrB,UAAM,OAAOD,UAAQ,MAAM,IAAI,GAAG,EAChC,cAAc,MAAM,KAAK,IAAI,GAAG,EAChC,cAAc,GAAG,EAAE,EACnB,eAAe,GAAG,EAAE,EACpB,eAAe,KAAK,KAAK,GAAG,EAAE,EAC9B,eAAe,KAAK,KAAK,GAAG,KAAK,KAAK,CAAC,KAAK,MAAM,KAAK,GAAG,EAC1D,cAAc,MAAM,KAAK,IAAI,MAAM,IAAI,KAAK,EAAE,EAC9C,cAAc,CAAC,IAAI,CAAC,EACpB,cAAc,GAAG,CAAC,EAAE,EACpB,cAAc,CAAC,IAAI,CAAC,EACpB,eAAe,CAAC,KAAK,KAAK,GAAG,EAAE,EAC/B,cAAc,IAAI,CAAC,EACnB,eAAe;AACjB,SAAK,MAAM;AACX,WAAO,UAAU,IAAI;AACrB,WAAO,MAAM,EAAE,KAAK,OAAO;AAC3B,WAAO,UAAU;AACjB,WAAO,UAAU;AAAA,EAClB,SAAS,MAAM;AACd,WAAO,UAAU;AACjB,YAAQ,IAAI,IAAI;AAAA,EACjB;AACA,SAAO;AACR;AAEA,IAAM,oBAA8B;AAAA,EACnC,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,MAAMK;AAAA,EACN,OAAOC;AACR;;;ACxFA,SAAS,YAAAC,WAAU,WAAAC,WAAS,UAAAC,UAAQ,WAAAC,WAAS,YAAAC,kBAAgB;AAE7D,IAAMC,SAAkB;AAAA,EACvB,UAAU;AAAA,EACV,QAAQ;AAAA;AAAA,IAEPF,UAAQ,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC;AAAA,IACjCA,UAAQ,MAAM,OAAO,IAAI,MAAM,KAAK,CAAC;AAAA,IACrCA,UAAQ,OAAO,OAAO,IAAI,MAAM,KAAK,CAAC;AAAA,IACtCA,UAAQ,OAAO,OAAO,IAAI,MAAM,KAAK,CAAC;AAAA,EACvC;AAAA,EACA,UAAU;AAAA,IACT,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,KAAK;AAAA,EACN;AAAA,EACA,KAAK;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA;AAAA,EACV;AACD;AAEA,SAASG,QAAM,GAAW,OAAyB;AAClD,QAAM,SAASF,WAASC,OAAK,QAAQ;AACrC,SAAO,UAAU,GAAG,OAAO,QAAQ,aAAa,CAAC;AAAA;AACjD,MAAI;AACH,UAAM,SAASH,SAAO;AACtB,UAAM,KAAK,MAAM,KAAK;AACtB,UAAM,MAAM,MAAM,KAAK;AACvB,UAAM,MAAM,MAAM,MAAM;AACxB,UAAM,MAAM,MAAM,MAAM;AACxB,UAAM,OAAOD,UAAQ,IAAI,EAAE;AAC3B,SAAK,cAAc,IAAI,EAAE;AACzB,SAAK,UAAU,IAAI,EAAE,EAAE,UAAU,IAAI,MAAM,IAAI;AAC/C,SAAK,UAAU,IAAI,EAAE,EAAE,UAAU,IAAI,MAAM,KAAK;AAChD,SAAK,UAAU,KAAK,EAAE,EAAE,UAAU,IAAI,OAAO,IAAI;AACjD,SAAK,UAAU,KAAK,EAAE,EAAE,UAAU,IAAI,OAAO,KAAK;AAClD,SAAK,cAAc,KAAK,EAAE;AAC1B,SAAK,cAAc,KAAK,EAAE;AAC1B,SAAK,UAAU,KAAK,EAAE,EAAE,UAAU,IAAI,MAAM,IAAI;AAChD,SAAK,UAAU,KAAK,EAAE,EAAE,UAAU,IAAI,MAAM,KAAK;AACjD,SAAK,UAAU,KAAK,GAAG,EAAE,UAAU,IAAI,OAAO,IAAI;AAClD,SAAK,UAAU,KAAK,GAAG,EAAE,UAAU,IAAI,OAAO,KAAK;AACnD,SAAK,cAAc,KAAK,GAAG;AAC3B,SAAK,cAAc,KAAK,GAAG;AAC3B,SAAK,UAAU,KAAK,GAAG,EAAE,UAAU,IAAI,MAAM,IAAI;AACjD,SAAK,UAAU,IAAI,GAAG,EAAE,UAAU,IAAI,MAAM,KAAK;AACjD,SAAK,UAAU,IAAI,GAAG,EAAE,UAAU,IAAI,OAAO,IAAI;AACjD,SAAK,UAAU,IAAI,GAAG,EAAE,UAAU,IAAI,OAAO,KAAK;AAClD,SAAK,cAAc,IAAI,GAAG;AAC1B,SAAK,cAAc,IAAI,GAAG;AAC1B,SAAK,UAAU,IAAI,GAAG,EAAE,UAAU,IAAI,MAAM,IAAI;AAChD,SAAK,UAAU,IAAI,EAAE,EAAE,UAAU,IAAI,MAAM,KAAK;AAChD,SAAK,UAAU,IAAI,EAAE,EAAE,UAAU,IAAI,OAAO,IAAI;AAChD,SAAK,UAAU,IAAI,EAAE,EAAE,UAAU,IAAI,OAAO,KAAK;AACjD,SAAK,eAAe;AACpB,SAAK,MAAM;AACX,WAAO,QAAQ,IAAI;AACnB,UAAM,OAAOA,UAAQ,IAAI,GAAG;AAC5B,SAAK,cAAc,IAAI,GAAG;AAC1B,SAAK,UAAU,IAAI,GAAG,EAAE,UAAU,IAAI,MAAM,IAAI;AAChD,SAAK,UAAU,IAAI,GAAG,EAAE,UAAU,IAAI,MAAM,KAAK;AACjD,SAAK,UAAU,KAAK,IAAI,EAAE,UAAU,IAAI,OAAO,IAAI;AACnD,SAAK,UAAU,KAAK,IAAI,EAAE,UAAU,IAAI,OAAO,KAAK;AACpD,SAAK,cAAc,KAAK,IAAI;AAC5B,SAAK,cAAc,IAAI,EAAE,EACvB,UAAU,IAAI,EAAE,EAChB,UAAU,IAAI,OAAO,KAAK,EAC1B,WAAW,KAAK,KAAK,GAAG,EAAE,EAC1B,UAAU,IAAI,OAAO,IAAI,EACzB,WAAW,KAAK,KAAK,GAAG,EAAE,EAC1B,UAAU,IAAI,MAAM,IAAI,EACxB,WAAW,KAAK,KAAK,GAAG,EAAE,EAC1B,UAAU,IAAI,MAAM,KAAK,EACzB,eAAe,KAAK,KAAK,GAAG,EAAE,EAC9B,eAAe,CAAC,KAAK,KAAK,GAAG,EAAE,EAC/B,UAAU,IAAI,EAAE,EAChB,UAAU,IAAI,GAAG,EACjB,WAAW,EACX,UAAU,IAAI,EAAE,EAChB,UAAU,IAAI,GAAG,EACjB,WAAW,EACX,UAAU,GAAG,EAAE,EACf,UAAU,IAAI,GAAG,EACjB,WAAW,EACX,UAAU,GAAG,GAAG,EAChB,UAAU,IAAI,GAAG,EACjB,WAAW,EACX,UAAU,GAAG,CAAC,EACd,UAAU,IAAI,GAAG,EACjB,WAAW,EACX,cAAc,IAAI,GAAG,EACrB,cAAc,IAAI,EAAE,EACpB,UAAU,GAAG,EAAE,EACf,UAAU,IAAI,EAAE,EAChB,WAAW,EACX,UAAU,IAAI,EAAE,EAChB,UAAU,IAAI,EAAE,EAChB,WAAW,EACX,UAAU,GAAG,CAAC,EACd,UAAU,IAAI,EAAE,EAChB,WAAW,EACX,UAAU,GAAG,EAAE,EACf,UAAU,IAAI,EAAE,EAChB,WAAW,EACX,UAAU,GAAG,CAAC,EACd,UAAU,IAAI,EAAE,EAChB,WAAW,EACX,cAAc,IAAI,EAAE,EACpB,cAAc,GAAG,EAAE,EACnB,UAAU,IAAI,CAAC,EACf,UAAU,GAAG,EAAE,EACf,WAAW,EACX,UAAU,KAAK,CAAC,EAChB,UAAU,GAAG,EAAE,EACf,WAAW,EACX,UAAU,GAAG,CAAC,EACd,UAAU,GAAG,EAAE,EACf,WAAW,EACX,UAAU,IAAI,CAAC,EACf,UAAU,GAAG,EAAE,EACf,WAAW,EACX,cAAc,GAAG,EAAE,EACnB,cAAc,IAAI,CAAC,EACnB,UAAU,GAAG,EAAE,EACf,UAAU,IAAI,CAAC,EACf,WAAW,EACX,UAAU,GAAG,GAAG,EAChB,UAAU,IAAI,CAAC,EACf,WAAW,EACX,UAAU,GAAG,CAAC,EACd,UAAU,IAAI,CAAC,EACf,WAAW,EACX,UAAU,GAAG,EAAE,EACf,UAAU,IAAI,CAAC,EACf,WAAW,EACX,cAAc,IAAI,CAAC,EACnB,cAAc,GAAG,GAAG,EACpB,UAAU,IAAI,EAAE,EAChB,UAAU,GAAG,GAAG,EAChB,WAAW,EACX,UAAU,KAAK,EAAE,EACjB,UAAU,GAAG,GAAG,EAChB,WAAW,EACX,UAAU,GAAG,EAAE,EACf,UAAU,GAAG,GAAG,EAChB,WAAW,EACX,UAAU,IAAI,EAAE,EAChB,UAAU,GAAG,GAAG,EAChB,WAAW,EACX,cAAc,GAAG,GAAG,EACpB,cAAc,KAAK,CAAC,EACpB,UAAU,IAAI,EAAE,EAChB,UAAU,KAAK,CAAC,EAChB,WAAW,EACX,UAAU,IAAI,GAAG,EACjB,UAAU,KAAK,CAAC,EAChB,WAAW,EACX,UAAU,IAAI,CAAC,EACf,UAAU,KAAK,CAAC,EAChB,WAAW,EACX,UAAU,IAAI,EAAE,EAChB,UAAU,KAAK,CAAC,EAChB,WAAW,EACX,cAAc,KAAK,CAAC,EACpB,eAAe;AACjB,SAAK,MAAM;AACX,WAAO,QAAQ,IAAI;AACnB,UAAM,OAAOA,UAAQ,KAAK,GAAG,EAC3B,cAAc,IAAI,CAAC,EACnB,UAAU,IAAI,CAAC,EACf,WAAWD,UAAS,GAAG,GAAG,IAAI,EAC9B,cAAc,IAAI,CAAC,EACnB,UAAU,IAAI,CAAC,EACf,WAAWA,UAAS,GAAG,GAAG,KAAK,EAC/B,cAAc,IAAI,CAAC,EACnB,cAAc,GAAG,EAAE,EACnB,UAAU,GAAG,EAAE,EACf,WAAWA,UAAS,GAAG,GAAG,IAAI,EAC9B,cAAc,GAAG,EAAE,EACnB,UAAU,GAAG,EAAE,EACf,WAAWA,UAAS,GAAG,GAAG,KAAK,EAC/B,cAAc,GAAG,EAAE,EACnB,cAAc,KAAK,CAAC,EACpB,UAAU,KAAK,CAAC,EAChB,WAAWA,UAAS,GAAG,GAAG,IAAI,EAC9B,cAAc,KAAK,CAAC,EACpB,UAAU,KAAK,CAAC,EAChB,WAAWA,UAAS,GAAG,GAAG,KAAK,EAC/B,cAAc,KAAK,CAAC,EACpB,cAAc,GAAG,GAAG,EACpB,UAAU,GAAG,GAAG,EAChB,WAAWA,UAAS,GAAG,GAAG,IAAI,EAC9B,cAAc,GAAG,GAAG,EACpB,UAAU,GAAG,GAAG,EAChB,WAAWA,UAAS,GAAG,GAAG,KAAK,EAC/B,cAAc,GAAG,GAAG;AACtB,SAAK,MAAM;AACX,WAAO,QAAQ,IAAI;AACnB,UAAM,OAAOC,UAAQ,KAAK,GAAG,EAC3B,cAAc,IAAI,EAAE,EACpB,UAAU,IAAI,EAAE,EAChB,WAAWD,UAAS,GAAG,GAAG,IAAI,EAC9B,cAAc,IAAI,EAAE,EACpB,UAAU,IAAI,EAAE,EAChB,WAAWA,UAAS,GAAG,GAAG,KAAK,EAC/B,cAAc,IAAI,EAAE,EACpB,cAAc,KAAK,EAAE,EACrB,UAAU,KAAK,EAAE,EACjB,WAAWA,UAAS,GAAG,GAAG,IAAI,EAC9B,cAAc,KAAK,EAAE,EACrB,UAAU,KAAK,EAAE,EACjB,WAAWA,UAAS,GAAG,GAAG,KAAK,EAC/B,cAAc,KAAK,EAAE,EACrB,cAAc,KAAK,GAAG,EACtB,UAAU,KAAK,GAAG,EAClB,WAAWA,UAAS,GAAG,GAAG,IAAI,EAC9B,cAAc,KAAK,GAAG,EACtB,UAAU,KAAK,GAAG,EAClB,WAAWA,UAAS,GAAG,GAAG,KAAK,EAC/B,cAAc,KAAK,GAAG,EACtB,cAAc,IAAI,GAAG,EACrB,UAAU,IAAI,GAAG,EACjB,WAAWA,UAAS,GAAG,GAAG,IAAI,EAC9B,cAAc,IAAI,GAAG,EACrB,UAAU,IAAI,GAAG,EACjB,WAAWA,UAAS,GAAG,GAAG,KAAK,EAC/B,cAAc,IAAI,GAAG;AACvB,SAAK,MAAM;AACX,WAAO,QAAQ,IAAI;AACnB,UAAM,OAAOC,UAAQ,KAAK,GAAG;AAC7B,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC3B,YAAM,OAAO,IAAI;AACjB,YAAM,UAAUD,UAAS,IAAI;AAC7B,WAAK,eAAe,SAAS,EAAE,EAC7B,WAAW,SAAS,EAAE,EACtB,YAAYA,UAAS,OAAO,GAAG,GAAGA,UAAS,MAAM,OAAO,GAAG,CAAC,EAC5D,eAAe,SAAS,EAAE,EAC1B,WAAW,SAAS,EAAE,EACtB,YAAYA,UAAS,OAAO,GAAG,GAAGA,UAAS,MAAM,OAAO,GAAG,CAAC,EAC5D,eAAe,SAAS,EAAE;AAAA,IAC7B;AACA,SAAK,MAAM;AACX,WAAO,QAAQ,IAAI;AACnB,WAAO,MAAM,EAAE,KAAK,OAAO;AAC3B,WAAO,UAAU;AACjB,WAAO,UAAU;AAAA,EAClB,SAAS,MAAM;AACd,WAAO,UAAU;AACjB,YAAQ,IAAI,IAAI;AAAA,EACjB;AACA,SAAO;AACR;AAEA,IAAM,oBAA8B;AAAA,EACnC,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,MAAMK;AAAA,EACN,OAAOC;AACR;;;ACrQA,SAAS,YAAAC,WAAU,WAAAC,WAAS,UAAAC,UAAQ,WAAAC,WAAS,YAAAC,kBAAgB;AAE7D,IAAMC,SAAkB;AAAA,EACvB,UAAU;AAAA,EACV,QAAQ;AAAA;AAAA,IAEPF,UAAQ,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC;AAAA,IACjCA,UAAQ,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC;AAAA,IACjCA,UAAQ,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC;AAAA,IACjCA,UAAQ,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC;AAAA,IACjCA,UAAQ,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC;AAAA,IACjCA,UAAQ,MAAM,MAAM,GAAG,GAAG,KAAK,CAAC;AAAA,EACjC;AAAA,EACA,UAAU;AAAA,IACT,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACL;AAAA,EACA,KAAK;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA;AAAA,EACV;AACD;AAEA,SAASG,QAAM,GAAW,OAAyB;AAClD,QAAM,SAASF,WAASC,OAAK,QAAQ;AACrC,SAAO,UAAU,GAAG,OAAO,QAAQ,aAAa,CAAC;AAAA;AACjD,MAAI;AACH,UAAM,SAASH,SAAO;AACtB,UAAM,KAAK,MAAM,KAAK;AACtB,UAAM,KAAK,MAAM,KAAK;AACtB,UAAM,KAAK,MAAM,KAAK;AACtB,UAAM,KAAK,MAAM,KAAK;AACtB,UAAM,KAAK,MAAM,KAAK;AACtB,UAAM,KAAK,MAAM,KAAK;AACtB,UAAM,OAAOD,UAAQ,KAAK,CAAC,EACzB,cAAc,IAAI,GAAG,EACrB,iBAAiB,EAAE,EACnB,cAAc,KAAK,EAAE,EACrB,iBAAiB,EAAE,EACnB,cAAc,MAAM,EAAE,EACtB,iBAAiB,EAAE,EACnB,cAAc,KAAK,GAAG,EACtB,iBAAiB,EAAE,EACnB,cAAc,KAAK,IAAI,EACvB,iBAAiB,EAAE,EACnB,cAAc,MAAM,GAAG,EACvB,iBAAiB,EAAE,EACnB,cAAc,KAAK,GAAG,EACtB,iBAAiB,EAAE,EACnB,eAAe,EACf,iBAAiB,EAAE;AACrB,WAAO,UAAU,KAAK,MAAM;AAC5B,WAAO,QAAQ,IAAI;AACnB,UAAM,KAAK;AACX,UAAM,OAAOA,UAAQ,KAAK,CAAC;AAC3B,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC3B,YAAM,QAAQ,MAAM,IAAI;AACxB,WAAK,eAAeD,UAAS,KAAK,GAAG,EAAE,EACrC,iBAAiB,EAAE,EACnB,eAAeA,UAAS,QAAQ,EAAE,GAAG,EAAE,EACvC,iBAAiB,EAAE,EACnB,eAAeA,UAAS,QAAQ,EAAE,GAAG,EAAE,EACvC,iBAAiB,EAAE,EACnB,eAAeA,UAAS,KAAK,GAAG,EAAE,EAClC,iBAAiB,EAAE;AAAA,IACtB;AACA,WAAO,UAAU,KAAK,MAAM;AAC5B,WAAO,QAAQ,IAAI;AACnB,UAAM,KAAK;AACX,UAAM,MAAM;AACZ,UAAM,OAAOC,UAAQ,GAAG,GAAG,EAAE,cAAc,IAAI,EAAE;AACjD,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC3B,YAAM,SAAS,IAAI,OAAS,IAAI,QAAQ;AACxC,YAAM,OAAO,IAAI,OAAS,IAAI,QAAQ;AAEtC,WAAK,cAAc,IAAI,CAAC,EACtB,cAAc,GAAG,EAAE,EACnB,iBAAiB,EAAE,EACnB,UAAU,IAAI,CAAC,EACf,UAAU,KAAK,OAAO,GAAG,EACzB,iBAAiB,EAAE,EACnB,cAAc,GAAG,CAAC,EAAE;AAAA,IACvB;AACA,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC3B,YAAM,QAAQ,IAAI,OAAS,IAAI,IAAI;AACnC,YAAM,SAAS,IAAI,OAAS,IAAI,QAAQ;AACxC,YAAM,OAAO,IAAI,OAAS,IAAI,QAAQ;AAEtC,WAAK,cAAc,IAAI,CAAC,EACtB,iBAAiB,EAAE,EACnB,UAAU,IAAI,CAAC,EACf,UAAU,KAAK,OAAO,GAAG,EACzB,iBAAiB,EAAE,EACnB,cAAc,IAAI,CAAC;AACrB,WAAK,cAAc,IAAK,CAAC,OAAO,KAAM,CAAC,EACrC,iBAAiB,EAAE,EACnB,UAAU,IAAK,OAAO,KAAM,IAAI,IAAI,CAAC,EACrC,UAAU,KAAK,OAAO,GAAG,EACzB,iBAAiB,EAAE,EACnB,cAAc,IAAK,CAAC,OAAO,KAAM,CAAC;AAAA,IACrC;AACA,SAAK,cAAc,IAAI,CAAC,EAAE,cAAc,IAAI,CAAC,EAAE,EAAE,eAAe;AAChE,WAAO,UAAU,KAAK,MAAM;AAC5B,WAAO,QAAQ,IAAI;AACnB,UAAM,QAAQA,UAAQ,GAAG,GAAG,EAC1B,iBAAiB,EAAE,EACnB,UAAU,IAAI,EAAE,EAChB,UAAU,IAAI,OAAO,IAAI,EACzB,cAAc,GAAG,IAAI,EAAE,EACvB,iBAAiB,EAAE,EACnB,UAAU,IAAI,CAAC,EAAE,EACjB,UAAU,IAAI,OAAO,IAAI,EACzB,cAAc,IAAI,CAAC,EACnB,iBAAiB,EAAE,EACnB,UAAU,IAAI,EAAE,EAChB,UAAU,IAAI,OAAO,KAAK,EAC1B,iBAAiB,EAAE,EACnB,cAAc,GAAG,IAAI,EAAE,EACvB,iBAAiB,EAAE,EACnB,UAAU,CAAC,IAAI,EAAE,EACjB,UAAU,IAAI,OAAO,KAAK,EAC1B,UAAU,IAAI,EAAE,EAChB,UAAU,IAAI,OAAO,KAAK,EAC1B,iBAAiB,EAAE,EACnB,cAAc,GAAG,IAAI,EAAE,EACvB,iBAAiB,EAAE,EACnB,UAAU,CAAC,IAAI,CAAC,EAAE,EAClB,UAAU,IAAI,OAAO,KAAK,EAC1B,UAAU,CAAC,IAAI,EAAE,EACjB,UAAU,IAAI,OAAO,KAAK,EAC1B,iBAAiB,EAAE,EACnB,cAAc,GAAG,KAAK,EAAE,EACxB,iBAAiB,EAAE,EACnB,UAAU,CAAC,IAAI,EAAE,EACjB,UAAU,IAAI,OAAO,IAAI,EACzB,cAAc,CAAC,IAAI,CAAC,EACpB,eAAe;AACjB,WAAO,UAAU,MAAM,MAAM;AAC7B,WAAO,QAAQ,KAAK;AACpB,UAAM,KAAK;AACX,UAAM,MAAM;AACZ,UAAM,OAAOA,UAAQ,GAAG,GAAI,EAC1B,UAAU,IAAI,CAAC,EACf,UAAU,KAAK,OAAO,IAAI,EAC1B,iBAAiB,EAAE,EACnB,UAAU,GAAG,EAAE,EACf,UAAU,KAAK,OAAO,IAAI,EAC1B,iBAAiB,EAAE,EACnB,UAAU,CAAC,IAAI,CAAC,EAAE,EAClB,UAAU,MAAM,KAAK,OAAO,IAAI,EAChC,iBAAiB,EAAE;AACrB,WAAO,UAAU,KAAK,MAAM;AAC5B,WAAO,QAAQ,IAAI;AACnB,UAAM,QAAQA,UAAQ,KAAK,GAAI,EAC7B,UAAU,GAAG,MAAM,EAAE,EACrB,UAAU,MAAM,KAAK,OAAO,KAAK,EACjC,iBAAiB,EAAE,EACnB,UAAU,IAAI,OAAO,EAAE,EACvB,UAAU,KAAK,OAAO,KAAK,EAC3B,iBAAiB,EAAE,EACnB,UAAU,CAAC,IAAI,CAAC,EAAE,EAClB,UAAU,MAAM,KAAK,OAAO,KAAK,EACjC,iBAAiB,EAAE;AACrB,WAAO,UAAU,MAAM,MAAM;AAC7B,WAAO,QAAQ,KAAK;AACpB,UAAM,QAAQA,UAAQ,KAAM,GAAI,EAC9B,UAAU,IAAI,CAAC,EACf,UAAU,MAAM,KAAK,MAAM,IAAI,EAC/B,iBAAiB,EAAE,EACnB,UAAU,GAAG,EAAE,EACf,UAAU,KAAK,MAAM,IAAI,EACzB,iBAAiB,EAAE,EACnB,UAAU,CAAC,IAAI,CAAC,EAAE,EAClB,UAAU,MAAM,KAAK,MAAM,IAAI,EAC/B,iBAAiB,EAAE;AACrB,WAAO,UAAU,MAAM,MAAM;AAC7B,WAAO,QAAQ,KAAK;AACpB,UAAM,QAAQA,UAAQ,KAAM,GAAI,EAC9B,UAAU,GAAG,MAAM,EAAE,EACrB,UAAU,MAAM,KAAK,MAAM,KAAK,EAChC,iBAAiB,EAAE,EACnB,UAAU,IAAI,OAAO,EAAE,EACvB,UAAU,KAAK,MAAM,KAAK,EAC1B,iBAAiB,EAAE,EACnB,UAAU,CAAC,IAAI,CAAC,EAAE,EAClB,UAAU,MAAM,KAAK,MAAM,KAAK,EAChC,iBAAiB,EAAE;AACrB,WAAO,UAAU,MAAM,MAAM;AAC7B,WAAO,QAAQ,KAAK;AACpB,UAAM,MAAM,IAAI;AAChB,UAAM,OAAO,IAAI;AACjB,UAAM,QAAQA,UAAQ,MAAM,GAAI,EAC9B,UAAU,KAAK,CAAC,EAChB,UAAU,MAAM,OAAO,KAAK,EAC5B,iBAAiB,EAAE,EACnB,UAAU,GAAG,GAAG,EAChB,UAAU,MAAM,OAAO,KAAK,EAC5B,iBAAiB,EAAE,EACnB,UAAU,CAAC,KAAK,CAAC,EACjB,UAAU,MAAM,OAAO,KAAK,EAC5B,iBAAiB,EAAE,EACnB,UAAU,GAAG,CAAC,GAAG,EACjB,UAAU,MAAM,OAAO,KAAK,EAC5B,iBAAiB,EAAE;AACrB,WAAO,UAAU,MAAM,MAAM;AAC7B,WAAO,QAAQ,KAAK;AACpB,UAAM,QAAQA,UAAQ,MAAM,GAAI,EAC9B,UAAU,IAAI,EAAE,EAChB,UAAU,IAAI,OAAO,KAAK,EAC1B,UAAU,IAAI,CAAC,EAAE,EACjB,UAAU,IAAI,OAAO,KAAK,EAC1B,iBAAiB,EAAE,EACnB,UAAU,CAAC,IAAI,MAAM,EAAE,EACvB,UAAU,MAAM,KAAK,OAAO,IAAI,EAChC,iBAAiB,EAAE,EACnB,UAAU,CAAC,IAAI,OAAO,EAAE,EACxB,UAAU,MAAM,KAAK,OAAO,IAAI,EAChC,iBAAiB,EAAE;AACrB,WAAO,UAAU,MAAM,MAAM;AAC7B,WAAO,QAAQ,KAAK;AACpB,UAAM,QAAQA,UAAQ,MAAM,GAAI,EAC9B,UAAU,IAAI,CAAC,EACf,UAAU,MAAM,IAAI,OAAO,KAAK,EAChC,iBAAiB,EAAE,EACnB,UAAU,IAAI,CAAC,EACf,UAAU,MAAM,IAAI,OAAO,KAAK,EAChC,iBAAiB,EAAE,EACnB,UAAU,KAAK,IAAI,CAAC,EACpB,UAAU,MAAM,IAAI,MAAM,IAAI,EAC9B,iBAAiB,EAAE;AACrB,WAAO,UAAU,MAAM,MAAM;AAC7B,WAAO,QAAQ,KAAK;AACpB,UAAM,OAAO;AACb,UAAM,QAAQA,UAAQ,KAAM,GAAI,EAC9B,UAAU,IAAI,IAAI,IAAI,EAAE,EACxB,UAAU,MAAM,IAAI,OAAO,KAAK,EAChC,iBAAiB,EAAE,EACnB,UAAU,IAAI,IAAI,KAAK,EAAE,EACzB,UAAU,MAAM,IAAI,OAAO,KAAK,EAChC,iBAAiB,EAAE,EACnB,UAAU,CAAC,IAAI,EAAE,EACjB,UAAU,IAAI,OAAO,IAAI,EACzB,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,EACzB,UAAU,IAAI,OAAO,IAAI,EACzB,iBAAiB,EAAE,EACnB,UAAU,CAAC,IAAI,OAAO,EAAE,EACxB,UAAU,IAAI,OAAO,IAAI,EACzB,UAAU,CAAC,IAAI,CAAC,EAAE,EAClB,UAAU,IAAI,OAAO,IAAI,EACzB,iBAAiB,EAAE;AACrB,WAAO,UAAU,MAAM,MAAM;AAC7B,WAAO,QAAQ,KAAK;AACpB,UAAM,KAAK;AACX,UAAM,MAAM;AACZ,UAAM,OAAOA,UAAQ,GAAG,GAAI,EAC1B,cAAc,IAAI,CAAC,EACnB,iBAAiB,EAAE,EACnB,cAAc,GAAG,EAAE,EACnB,iBAAiB,EAAE,EACnB,eAAe,EACf,iBAAiB,EAAE;AACrB,WAAO,UAAU,KAAK,MAAM;AAC5B,WAAO,QAAQ,IAAI;AACnB,UAAM,QAAQA,UAAQ,KAAK,GAAI,EAC7B,cAAc,IAAI,CAAC,EACnB,iBAAiB,EAAE,EACnB,UAAU,GAAG,EAAE,EACf,UAAU,KAAK,OAAO,IAAI,EAC1B,iBAAiB,EAAE,EACnB,UAAU,CAAC,IAAI,CAAC,EAChB,UAAU,KAAK,OAAO,KAAK,EAC3B,iBAAiB,EAAE,EACnB,eAAe,EACf,iBAAiB,EAAE;AACrB,WAAO,UAAU,MAAM,MAAM;AAC7B,WAAO,QAAQ,KAAK;AACpB,UAAM,QAAQA,UAAQ,KAAM,GAAI,EAC9B,UAAU,GAAG,MAAM,EAAE,EACrB,UAAU,MAAM,KAAK,MAAM,KAAK,EAChC,iBAAiB,EAAE,EACnB,UAAU,IAAI,OAAO,EAAE,EACvB,UAAU,KAAK,MAAM,KAAK,EAC1B,iBAAiB,EAAE,EACnB,UAAU,CAAC,IAAI,CAAC,EAAE,EAClB,UAAU,MAAM,KAAK,MAAM,KAAK,EAChC,iBAAiB,EAAE;AACrB,WAAO,UAAU,MAAM,MAAM;AAC7B,WAAO,QAAQ,KAAK;AACpB,UAAM,QAAQA,UAAQ,MAAM,GAAI,EAC9B,UAAU,IAAI,CAAC,EACf,UAAU,KAAK,OAAO,KAAK,EAC3B,iBAAiB,EAAE,EACnB,UAAU,GAAG,EAAE,EACf,UAAU,KAAK,OAAO,KAAK,EAC3B,iBAAiB,EAAE,EACnB,UAAU,CAAC,IAAI,CAAC,EAChB,UAAU,KAAK,OAAO,KAAK,EAC3B,iBAAiB,EAAE,EACnB,UAAU,GAAG,CAAC,EAAE,EAChB,UAAU,KAAK,OAAO,KAAK,EAC3B,iBAAiB,EAAE;AACrB,WAAO,UAAU,MAAM,MAAM;AAC7B,WAAO,QAAQ,KAAK;AACpB,UAAM,QAAQA,UAAQ,MAAM,GAAI,EAC9B,UAAU,IAAI,EAAE,EAChB,UAAU,IAAI,OAAO,KAAK,EAC1B,UAAU,IAAI,CAAC,EAAE,EACjB,UAAU,IAAI,OAAO,KAAK,EAC1B,iBAAiB,EAAE,EACnB,UAAU,CAAC,IAAI,MAAM,EAAE,EACvB,UAAU,MAAM,KAAK,OAAO,IAAI,EAChC,iBAAiB,EAAE,EACnB,UAAU,CAAC,IAAI,OAAO,EAAE,EACxB,UAAU,MAAM,KAAK,OAAO,IAAI,EAChC,iBAAiB,EAAE;AACrB,WAAO,UAAU,MAAM,MAAM;AAC7B,WAAO,QAAQ,KAAK;AACpB,UAAM,KAAK;AACX,UAAM,MAAM;AACZ,UAAM,OAAOA,UAAQ,GAAG,GAAI,EAC1B,cAAc,IAAI,CAAC,EACnB,iBAAiB,EAAE,EACnB,cAAc,GAAG,EAAE,EACnB,iBAAiB,EAAE,EACnB,eAAe,EACf,iBAAiB,EAAE;AACrB,WAAO,UAAU,KAAK,MAAM;AAC5B,WAAO,QAAQ,IAAI;AACnB,UAAM,QAAQA,UAAQ,KAAK,GAAI,EAC7B,cAAc,IAAI,CAAC,EACnB,iBAAiB,EAAE,EACnB,UAAU,GAAG,EAAE,EACf,UAAU,KAAK,OAAO,IAAI,EAC1B,iBAAiB,EAAE,EACnB,UAAU,CAAC,IAAI,CAAC,EAChB,UAAU,KAAK,OAAO,KAAK,EAC3B,iBAAiB,EAAE,EACnB,eAAe,EACf,iBAAiB,EAAE;AACrB,WAAO,UAAU,MAAM,MAAM;AAC7B,WAAO,QAAQ,KAAK;AACpB,UAAM,QAAQA,UAAQ,KAAM,GAAI,EAC9B,UAAU,GAAG,MAAM,EAAE,EACrB,UAAU,MAAM,KAAK,MAAM,KAAK,EAChC,iBAAiB,EAAE,EACnB,UAAU,IAAI,OAAO,EAAE,EACvB,UAAU,KAAK,MAAM,KAAK,EAC1B,iBAAiB,EAAE,EACnB,UAAU,CAAC,IAAI,CAAC,EAAE,EAClB,UAAU,MAAM,KAAK,MAAM,KAAK,EAChC,iBAAiB,EAAE;AACrB,WAAO,UAAU,MAAM,MAAM;AAC7B,WAAO,QAAQ,KAAK;AAEpB,UAAM,QAAQA,UAAQ,MAAM,GAAI,EAC9B,UAAU,IAAI,CAAC,EACf,UAAU,KAAK,OAAO,KAAK,EAC3B,iBAAiB,EAAE,EACnB,UAAU,GAAG,EAAE,EACf,UAAU,KAAK,OAAO,KAAK,EAC3B,iBAAiB,EAAE,EACnB,UAAU,CAAC,IAAI,CAAC,EAChB,UAAU,KAAK,OAAO,KAAK,EAC3B,iBAAiB,EAAE,EACnB,UAAU,GAAG,CAAC,EAAE,EAChB,UAAU,KAAK,OAAO,KAAK,EAC3B,iBAAiB,EAAE;AACrB,WAAO,UAAU,MAAM,MAAM;AAC7B,WAAO,QAAQ,KAAK;AACpB,UAAM,QAAQA,UAAQ,MAAM,GAAI,EAC9B,UAAU,IAAI,EAAE,EAChB,UAAU,IAAI,OAAO,KAAK,EAC1B,UAAU,IAAI,CAAC,EAAE,EACjB,UAAU,IAAI,OAAO,KAAK,EAC1B,iBAAiB,EAAE,EACnB,UAAU,CAAC,IAAI,MAAM,EAAE,EACvB,UAAU,MAAM,KAAK,OAAO,IAAI,EAChC,iBAAiB,EAAE,EACnB,UAAU,CAAC,IAAI,OAAO,EAAE,EACxB,UAAU,MAAM,KAAK,OAAO,IAAI,EAChC,iBAAiB,EAAE;AACrB,WAAO,UAAU,MAAM,MAAM;AAC7B,WAAO,QAAQ,KAAK;AACpB,WAAO,MAAM,EAAE,KAAK,OAAO;AAC3B,WAAO,UAAU;AACjB,WAAO,UAAU;AAAA,EAClB,SAAS,MAAM;AACd,WAAO,UAAU;AACjB,YAAQ,IAAI,IAAc;AAAA,EAC3B;AACA,SAAO;AACR;AAEA,IAAM,oBAA8B;AAAA,EACnC,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,MAAMI;AAAA,EACN,OAAOC;AACR;;;ACnZA,SAAS,WAAAC,WAAS,UAAAC,UAAQ,WAAAC,WAAS,YAAAC,kBAAgB;AAEnD,IAAMC,SAAkB;AAAA,EACvB,UAAU;AAAA,EACV,QAAQ;AAAA;AAAA,IAEPF,UAAQ,MAAM,UAAU,IAAI,GAAG,IAAI,CAAC;AAAA,IACpCA,UAAQ,MAAM,UAAU,GAAG,GAAG,IAAI,CAAC;AAAA,IACnCA,UAAQ,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC;AAAA,EAChC;AAAA,EACA,UAAU;AAAA,IACT,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACL;AAAA,EACA,KAAK;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA;AAAA,EACV;AACD;AAEA,SAASG,QAAM,GAAW,OAAyB;AAClD,QAAM,SAASF,WAASC,OAAK,QAAQ;AACrC,SAAO,UAAU,GAAG,OAAO,QAAQ,aAAa,CAAC;AAAA;AACjD,MAAI;AACH,UAAM,SAASH,SAAO;AACtB,UAAM,KAAK,MAAM;AACjB,UAAM,KAAK,MAAM;AACjB,UAAM,KAAK,MAAM;AACjB,UAAM,KAAK,KAAK;AAChB,UAAM,KAAM,IAAI,KAAK,MAAO,KAAK;AACjC,UAAM,QAAQD,UAAQ,IAAI,CAAC,EACzB,eAAe,IAAI,MAAM,EAAE,EAC3B,iBAAiB,EAAE,EACnB,WAAW,IAAI,IAAI,EAAE,EACrB,UAAU,OAAO,IAAI,OAAO,IAAI,EAChC,iBAAiB,EAAE,EACnB,eAAe,IAAI,IAAI,MAAM,EAAE;AACjC,UAAM,OAAOA,UAAQ,IAAI,CAAC;AAC1B,UAAM,QAAQ,MAAM,MAAM,EAAE,iBAAiB,EAAE;AAC/C,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC5B,YAAM,QAAQ,MAAM,OAAO,GAAG,GAAG,IAAI,IAAI,EAAE,EAAE,MAAM,GAAG,GAAG,IAAI,IAAI,KAAK,IAAI;AAC1E,WAAK,WAAW,KAAK;AAAA,IACtB;AACA,SAAK,eAAe;AAIpB,WAAO,UAAU,KAAK,MAAM;AAC5B,WAAO,QAAQ,IAAI;AACnB,UAAM,OAAOA,UAAQ,IAAI,CAAC;AAC1B,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC5B,WAAK,WAAW,MAAM,OAAO,GAAG,GAAG,IAAI,IAAI,EAAE,EAAE,MAAM,GAAG,GAAG,IAAI,IAAI,KAAK,KAAK,CAAC;AAAA,IAC/E;AACA,SAAK,eAAe;AACpB,WAAO,UAAU,KAAK,MAAM;AAC5B,WAAO,QAAQ,KAAK,UAAU,MAAM,IAAI,CAAC,CAAC;AAC1C,UAAM,QAAQ,MAAM,gBAAgB;AACpC,UAAM,OAAO,MAAM,MAAM;AACzB,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC5B,WAAK,WAAW,MAAM,OAAO,GAAG,GAAG,IAAI,IAAI,EAAE,EAAE,MAAM,GAAG,GAAG,IAAI,IAAI,GAAG,CAAC;AAAA,IACxE;AACA,SAAK,eAAe;AACpB,UAAM,OAAO,KAAK,UAAU,KAAK,IAAI,CAAC;AACtC,WAAO,UAAU,KAAK,MAAM;AAC5B,WAAO,QAAQ,IAAI;AACnB,UAAM,OAAO,KAAK,eAAe,KAAK,KAAK,GAAG,KAAK,EAAE;AACrD,WAAO,UAAU,KAAK,MAAM;AAC5B,WAAO,QAAQ,IAAI;AACnB,WAAO,MAAM,EAAE,KAAK,OAAO;AAC3B,WAAO,UAAU;AACjB,WAAO,UAAU;AAAA,EAClB,SAAS,MAAM;AACd,WAAO,UAAU;AACjB,YAAQ,IAAI,IAAc;AAAA,EAC3B;AACA,SAAO;AACR;AAEA,IAAM,oBAA8B;AAAA,EACnC,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,MAAMI;AAAA,EACN,OAAOC;AACR;;;ACrFA;AAAA,EACC,WAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,aAAAC;AAAA,EACA,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,YAAAC;AAAA,OACM;AAEP,IAAMC,SAAkB;AAAA,EACvB,UAAU;AAAA,EACV,QAAQ;AAAA;AAAA,IAEPJ,WAAU,UAAU,IAAI;AAAA,IACxBD,UAAQ,eAAe,MAAM,KAAK,GAAG,KAAM,CAAC;AAAA,IAC5CC,WAAU,WAAW,IAAI;AAAA,IACzBD,UAAQ,gBAAgB,MAAM,IAAI,GAAG,KAAM,CAAC;AAAA,IAC5CC,WAAU,qBAAqB,KAAK;AAAA,EACrC;AAAA,EACA,UAAU;AAAA,IACT,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,qBAAqB;AAAA,EACtB;AAAA,EACA,KAAK;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,EACV;AACD;AAEA,SAASK,QAAM,GAAW,OAAyB;AAClD,QAAM,SAASJ,WAASG,OAAK,QAAQ;AACrC,SAAO,UAAU,GAAG,OAAO,QAAQ,aAAa,CAAC;AAAA;AACjD,MAAI;AACH,UAAM,SAASN,SAAO;AACtB,QAAI,MAAM,WAAW,GAAG;AACvB,YAAM,YAAYD,gBAAc,GAAG,GAAG,MAAM,aAAa,CAAC;AAC1D,aAAO,QAAQ,SAAS;AAAA,IACzB;AACA,QAAI,MAAM,YAAY,GAAG;AACxB,YAAM,QAAQ,MAAM,cAAc;AAClC,YAAM,QAAQ,MAAM,mBAAmB,MAAM,IAAI,OAAO;AACxD,YAAM,OAAOD,UAAQ,GAAG,CAAC,EACvB,cAAc,OAAO,CAAC,EACtB,UAAU,OAAO,KAAK,EACtB,UAAU,QAAQ,KAAK,OAAO,IAAI,EAClC,eAAe;AACjB,aAAO,QAAQ,IAAI;AAAA,IACpB;AACA,WAAO,MAAM,EAAE,KAAK,OAAO;AAC3B,UAAM,aAAa,OAAO;AAC1B,WAAO,MAAM;AAAA,MACZ,UAAU;AAAA,QACT;AAAA,UACC,SAAS,UAAU,UAAU;AAAA,UAC7B,MAAM,GAAG,UAAU;AAAA,UACnB,eAAeM,WAAS;AAAA,UACxB,QAAQ;AAAA,UACR,QAAQ,CAAC,GAAG,GAAG,CAAC;AAAA,UAChB,WAAW,CAAC,GAAG,GAAG,CAAC;AAAA,QACpB;AAAA,MACD;AAAA,MACA,SAAS;AAAA,QACR;AAAA,UACC,SAAS,OAAO,UAAU;AAAA,UAC1B,YAAYC,WAAS;AAAA,UACrB,QAAQ,CAAC,UAAU,UAAU,MAAM;AAAA,QACpC;AAAA,MACD;AAAA,IACD;AACA,WAAO,UAAU;AACjB,WAAO,UAAU;AAAA,EAClB,SAAS,MAAM;AACd,WAAO,UAAU;AACjB,YAAQ,IAAI,IAAc;AAAA,EAC3B;AACA,SAAO;AACR;AAEA,IAAM,oBAA8B;AAAA,EACnC,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,MAAMC;AAAA,EACN,OAAOC;AACR;","names":["contour","ffix","contour","contourCircle","point","ffix","contour","ffix","contour","figure","pNumber","pCheckbox","initGeom","EBVolume","pDef","pNumber","pCheckbox","pGeom","initGeom","figure","EBVolume","designParam","checkGeom","prefixLog","figure","degToRad","radToDeg","ffix","pNumber","initGeom","EBVolume","contour","contourCircle","figure","radToDeg","ffix","pNumber","initGeom","EExtrude","EBVolume","pDef","pGeom","contour","contourCircle","figure","radToDeg","ffix","pNumber","initGeom","EExtrude","EBVolume","pDef","pGeom","contour","contourCircle","figure","radToDeg","ffix","pNumber","initGeom","EExtrude","EBVolume","pDef","pGeom","contour","contourCircle","figure","ffix","pNumber","initGeom","EExtrude","EBVolume","pDef","pGeom","pDef","pNumber","pGeom","initGeom","figure","ffix","degToRad","radToDeg","designParam","checkGeom","prefixLog","EBVolume","designParam","checkGeom","prefixLog","figure","degToRad","radToDeg","ffix","pNumber","initGeom","EBVolume","designParam","checkGeom","prefixLog","contour","contourCircle","figure","radToDeg","ffix","pNumber","initGeom","EExtrude","EBVolume","pDef","pNumber","pGeom","initGeom","figure","ffix","contour","designParam","checkGeom","prefixLog","contourCircle","radToDeg","EExtrude","EBVolume","pDef","pNumber","pGeom","initGeom","figure","ffix","degToRad","radToDeg","designParam","checkGeom","prefixLog","EBVolume","contour","contourCircle","figure","ffix","pNumber","initGeom","EExtrude","EBVolume","pDef","pGeom","contour","contourCircle","figure","ffix","pNumber","initGeom","EExtrude","EBVolume","pDef","pGeom","contour","contourCircle","figure","ffix","pNumber","initGeom","EExtrude","EBVolume","pDef","pGeom","contour","contourCircle","figure","radToDeg","ffix","pNumber","initGeom","EExtrude","EBVolume","pDef","pGeom","contour","figure","ffix","pNumber","pCheckbox","pDropdown","initGeom","EExtrude","EBVolume","pDef","pGeom","degToRad","point","figure","pNumber","initGeom","pDef","pGeom","point","figure","pNumber","initGeom","pDef","pGeom","contour","contourCircle","figure","pNumber","initGeom","pDef","pGeom","degToRad","point","figure","pNumber","initGeom","pDef","pGeom","point","figure","pNumber","initGeom","pDef","pGeom","point","figure","pNumber","initGeom","pDef","pGeom","degToRad","point","line","figure","pNumber","initGeom","pDef","pGeom","bisector","point","figure","pNumber","initGeom","pDef","pGeom","degToRad","point","figure","pNumber","initGeom","pDef","pGeom","contour","contourCircle","figure","pNumber","initGeom","pDef","pGeom","degToRad","contour","figure","pNumber","initGeom","pDef","pGeom","degToRad","contour","figure","pNumber","initGeom","pDef","pGeom","contour","figure","pNumber","initGeom","pDef","pGeom","contour","contourCircle","figure","pNumber","pCheckbox","initGeom","EExtrude","EBVolume","pDef","pGeom"]}