UNPKG

@needle-tools/engine

Version:

Needle Engine is a web-based runtime for 3D apps. It runs on your machine for development with great integrations into editors like Unity or Blender - and can be deployed onto any device! It is flexible, extensible and networking and XR are built-in.

570 lines • 1.77 MB
var oS = Object.defineProperty; var t_ = (o) => { throw TypeError(o); }; var rS = (o, t, e) => t in o ? oS(o, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : o[t] = e; var r = (o, t, e) => rS(o, typeof t != "symbol" ? t + "" : t, e), Xf = (o, t, e) => t.has(o) || t_("Cannot " + e); var ue = (o, t, e) => (Xf(o, t, "read from private field"), e ? e.call(o) : t.get(o)), mn = (o, t, e) => t.has(o) ? t_("Cannot add the same private member more than once") : t instanceof WeakSet ? t.add(o) : t.set(o, e), gn = (o, t, e, i) => (Xf(o, t, "write to private field"), i ? i.call(o, e) : t.set(o, e), e), $l = (o, t, e) => (Xf(o, t, "access private method"), e); import { Vector2 as ae, Vector3 as w, Vector4 as ye, Quaternion as W, PlaneGeometry as cs, WebGLRenderer as Zr, PerspectiveCamera as ve, OrthographicCamera as Lu, Scene as ji, Mesh as G, Texture as Fe, Uniform$1 as tn, Color as re, ShaderMaterial as ns, Box3 as Li, ShadowMaterial as b0, Euler as Ft, MeshStandardMaterial as yt, Box3Helper as aS, GridHelper as gg, Object3D as L, Material as Pe, Matrix3 as v0, Matrix4 as oe, Layers as Wo, Ray as Vo, MathUtils as Us, AxesHelper as Di, MeshBasicMaterial as Me, DoubleSide as Bi, BufferGeometry as es, Group as jo, CylinderGeometry as w0, SphereGeometry as Du, BoxGeometry as Za, SpriteMaterial as lS, Sprite as cS, Shape as hS, ExtrudeGeometry as dS, Fog as x0, DirectionalLight as rm, PointLight as yg, EdgesGeometry as uS, LineSegments as S0, LineBasicMaterial as C0, Line as $c, BufferAttribute as _t, Raycaster as ju, Sphere as Bu, ArrayCamera as fS, Plane as Hr, SkinnedMesh as Ns, InterleavedBufferAttribute as P0, Skeleton as pS, Bone as mS, Source as gS, WebGLCubeRenderTarget as yS, CubeCamera as _S, AnimationClip as Bo, FileLoader as _g, TextureLoader as Wa, PropertyBinding as Ja, LinearSRGBColorSpace as qs, ShaderChunk as ii, UniformsLib as bS, DataTexture as bg, RGBAFormat as Fu, EquirectangularReflectionMapping as $s, SRGBColorSpace as Xs, Clock as vS, NeutralToneMapping as el, AgXToneMapping as zu, ACESFilmicToneMapping as Uu, NoToneMapping as jd, PCFSoftShadowMap$1 as wS, BasicNodeLibrary as xS, WebGLRenderTarget as ss, DepthTexture as O0, NearestFilter as Bd, LoopRepeat as SS, LoopOnce as am, AnimationMixer as vg, CompressedTexture as CS, FrontSide as Ho, Camera as PS, Frustum as i_, AudioListener as OS, PositionalAudio as kS, AudioLoader as lm, EventDispatcher as wg, BackSide as Nu, MeshDepthMaterial as MS, CustomBlending as RS, MaxEquation as TS, AmbientLight as ES, HemisphereLight as AS, AlwaysStencilFunc as IS, GreaterEqualStencilFunc as LS, NotEqualStencilFunc as DS, GreaterStencilFunc as jS, LessEqualStencilFunc as BS, EqualStencilFunc as FS, LessStencilFunc as zS, NeverStencilFunc as n_, InvertStencilOp as US, DecrementWrapStencilOp as NS, IncrementWrapStencilOp as $S, DecrementStencilOp as WS, IncrementStencilOp as VS, ReplaceStencilOp as HS, ZeroStencilOp as GS, KeepStencilOp as qS, RawShaderMaterial as k0, GLSL3 as XS, AlwaysDepth as QS, GreaterEqualDepth as YS, GreaterDepth as KS, LessEqualDepth as ZS, LessDepth as JS, NotEqualDepth as eC, EqualDepth as tC, BatchedMesh as s_, MeshPhysicalMaterial as cm, LinearFilter as Fd, UnsignedByteType as iC, RingGeometry as nC, Line3 as sC, AdditiveBlending as M0, BoxHelper as oC, SpotLight as rC, DirectionalLightHelper as aC, CameraHelper as lC, LOD as cC, Triangle as hC, NormalBlending as dC, ReinhardToneMapping as xg, LinearToneMapping as Sg, HalfFloatType as Qf, VideoTexture as uC, CubeTexture as fC, CompressedCubeTexture as pC, EquirectangularRefractionMapping as mC, VectorKeyframeTrack as gC, QuaternionKeyframeTrack as yC, Audio as _C, ShaderLib as zd, UniformsUtils as R0, MirroredRepeatWrapping as o_, MeshNormalMaterial as bC, AudioContext as vC, PMREMGenerator$1 as wC } from "./three-Bz6X1mrw.js"; import { createLoaders as Cg, getRaycastMesh as T0, LODsManager as pa, NEEDLE_progressive as Ze, addDracoAndKTX2Loaders as xC, configureLoader as SC, setKTX2TranscoderLocation as CC, setDracoDecoderLocation as PC } from "./gltf-progressive-YjtQYFa9.js"; import { GroundedSkybox as tl, Font as OC, TextGeometry as kC, FontLoader as MC, GLTFLoader as Qs, TransformControlsGizmo as E0, EXRLoader as Ud, RGBELoader as hm, Stats as RC, nodeFrame as TC, OrbitControls as A0, PositionalAudioHelper as EC, HorizontalBlurShader as AC, VerticalBlurShader as IC, GLTFExporter as I0, strToU8 as L0, zipSync as LC, XRControllerModelFactory as DC, XRHandMeshModel as jC, Line2 as BC, LineGeometry as FC, LineMaterial as zC, KTX2Loader as UC, TransformControls as NC, InteractiveGroup as $C, HTMLMesh as WC, VertexNormalsHelper as VC, OBJLoader as Pg, FBXLoader as D0, mergeVertices as HC } from "./three-examples-GggCDHv0.js"; import { fetchProfile as GC, MotionController as qC, $70d766613f57b014$export$2e2bcd8739ae039 as r_, ByteBuffer as XC, v5 as a_, md5 as l_, SIZE_PREFIX_LENGTH as j0, Builder as Og, createNoise4D as QC, Matrix4 as Yf, BatchedParticleRenderer as YC, ParticleSystem as KC, RenderMode as Os, ConstantColor as ZC, Vector4 as JC, ConstantValue as e1, TrailParticle as c_, WorkerBase as t1, MeshBVH as i1 } from "./vendor-BSD1RQIh.js"; import { __webpack_exports__default as Ee, __webpack_exports__Text as B0, __webpack_exports__Block as F0, __webpack_exports__update as n1, SimpleStateBehavior as s1, __webpack_exports__Inline as Kf, __webpack_exports__FontLibrary as h_, ThreeMeshUI as d_ } from "./three-mesh-ui-CLNOfsWn.js"; import { EffectAttribute as o1 } from "./postprocessing-BkxN_08g.js"; const Zf = /* @__PURE__ */ new Map(); function _i(o = ((t) => (t = globalThis.location) == null ? void 0 : t.hostname)()) { if (Zf.has(o)) return Zf.get(o); const e = /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})|localhost/.test(o); return Zf.set(o, e), e === !0; } function r1() { return window.location.hostname.includes("glitch.me"); } const a1 = '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 187.74"><defs><linearGradient id="a" x1="89.64" y1="184.81" x2="90.48" y2="21.85" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#62d399"/><stop offset=".51" stop-color="#acd842"/><stop offset=".9" stop-color="#d7db0a"/></linearGradient><linearGradient id="b" x1="69.68" y1="178.9" x2="68.08" y2="16.77" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#0ba398"/><stop offset=".5" stop-color="#4ca352"/><stop offset="1" stop-color="#76a30a"/></linearGradient><linearGradient id="c" x1="36.6" y1="152.17" x2="34.7" y2="84.19" gradientUnits="userSpaceOnUse"><stop offset=".19" stop-color="#36a382"/><stop offset=".54" stop-color="#49a459"/><stop offset="1" stop-color="#76a30b"/></linearGradient><linearGradient id="d" x1="15.82" y1="153.24" x2="18" y2="90.86" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#267880"/><stop offset=".51" stop-color="#457a5c"/><stop offset="1" stop-color="#717516"/></linearGradient><linearGradient id="e" x1="135.08" y1="135.43" x2="148.93" y2="63.47" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#b0d939"/><stop offset="1" stop-color="#eadb04"/></linearGradient><linearGradient id="f" x1="-4163.25" y1="2285.12" x2="-4160.81" y2="2215.34" gradientTransform="rotate(20 4088.49 13316.712)" gradientUnits="userSpaceOnUse"><stop offset=".17" stop-color="#74af52"/><stop offset=".48" stop-color="#99be32"/><stop offset="1" stop-color="#c0c40a"/></linearGradient><symbol id="g" viewBox="0 0 160 187.74"><path style="fill:url(#a)" d="M79.32 36.98v150.76L95 174.54l6.59-156.31-22.27 18.75z"/><path style="fill:url(#b)" d="M79.32 36.98 57.05 18.23l6.59 156.31 15.68 13.2V36.98z"/><path style="fill:url(#c)" d="m25.19 104.83 8.63 49.04 12.5-14.95-2.46-56.42-18.67 22.33z"/><path style="fill:url(#d)" d="M25.19 104.83 0 90.24l16.97 53.86 16.85 9.77-8.63-49.04z"/><path style="fill:#9c3" d="M43.86 82.5 18.69 67.98 0 90.24l25.18 14.59L43.86 82.5z"/><path style="fill:url(#e)" d="m134.82 78.69-9.97 56.5 15.58-9.04L160 64.1l-25.18 14.59z"/><path style="fill:url(#f)" d="m134.82 78.69-18.68-22.33-2.86 65 11.57 13.83 9.97-56.5z"/><path style="fill:#ffe113" d="m160 64.1-18.69-22.26-25.17 14.52 18.67 22.33L160 64.1z"/><path style="fill:#f3e600" d="M101.59 18.23 79.32 0 57.05 18.23l22.27 18.75 22.27-18.75z"/></symbol></defs><use width="160" height="187.74" xlink:href="#g"/></svg>', l1 = btoa(a1), c1 = "data:image/svg+xml;base64," + l1, z0 = c1, h1 = `<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'> <svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" version="1.1" viewBox="0 0 1014 282" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"> <g transform="matrix(1.008 0 0 1.008 -2.239 .61874)"> <path d="m665.95 132.73v44.88l-10.56-8.4c-0.8-0.64-1.2-1.44-1.2-2.4v-32.4c0-6.48-4.12-9.72-12.36-9.72-2.16 0-4.18 0.4-6.06 1.2s-3.54 1.8-4.98 3-2.56 2.5-3.36 3.9-1.2 2.7-1.2 3.9v40.92l-10.68-8.4c-0.72-0.64-1.08-1.44-1.08-2.4v-53.76l10.92 8.52c0.32 0.24 0.56 0.44 0.72 0.6s0.36 0.32 0.6 0.48c0.96-1.2 2.14-2.28 3.54-3.24s2.92-1.76 4.56-2.4 3.34-1.14 5.1-1.5 3.44-0.54 5.04-0.54c1.44 0 2.92 0.04 4.44 0.12s2.84 0.28 3.96 0.6c4.56 1.12 7.8 3.12 9.72 6s2.88 6.56 2.88 11.04z" fill-rule="nonzero"/> </g> <g transform="matrix(1.008 0 0 1.008 -2.239 .61874)"> <path d="m732.38 146.05c0 0.88 0.02 1.5 0.06 1.86s-0.02 0.98-0.18 1.86h-7.08c-2.08 0-4.44-0.02-7.08-0.06s-5.36-0.06-8.16-0.06h-22.08c0 2.88 0.56 5.36 1.68 7.44s2.6 3.8 4.44 5.16 3.94 2.36 6.3 3 4.74 0.96 7.14 0.96c3.04 0 5.9-0.76 8.58-2.28s4.94-3.52 6.78-6c0.64 0.56 1.54 1.48 2.7 2.76s2.94 3.2 5.34 5.76c-2.8 3.36-6.22 6.02-10.26 7.98s-8.42 2.94-13.14 2.94-8.92-0.64-12.84-1.92-7.32-3.24-10.2-5.88-5.12-5.98-6.72-10.02-2.4-8.82-2.4-14.34c0-4.96 0.66-9.42 1.98-13.38s3.22-7.32 5.7-10.08 5.44-4.9 8.88-6.42 7.32-2.28 11.64-2.28c5.76 0 10.52 0.88 14.28 2.64s6.72 4.16 8.88 7.2 3.66 6.54 4.5 10.5 1.26 8.18 1.26 12.66zm-29.4-22.8c-2.16 0.16-4.16 0.72-6 1.68s-3.42 2.2-4.74 3.72-2.36 3.28-3.12 5.28-1.14 4.12-1.14 6.36h33.12c0-2-0.22-4.06-0.66-6.18s-1.3-4.02-2.58-5.7-3.1-3.02-5.46-4.02-5.5-1.38-9.42-1.14z" fill-rule="nonzero"/> </g> <g transform="matrix(1.008 0 0 1.008 -2.239 .61874)"> <path d="m795.93 146.05c0 0.88 0.02 1.5 0.06 1.86s-0.02 0.98-0.18 1.86h-7.08c-2.08 0-4.44-0.02-7.08-0.06s-5.36-0.06-8.16-0.06h-22.08c0 2.88 0.56 5.36 1.68 7.44s2.6 3.8 4.44 5.16 3.94 2.36 6.3 3 4.74 0.96 7.14 0.96c3.04 0 5.9-0.76 8.58-2.28s4.94-3.52 6.78-6c0.64 0.56 1.54 1.48 2.7 2.76s2.94 3.2 5.34 5.76c-2.8 3.36-6.22 6.02-10.26 7.98s-8.42 2.94-13.14 2.94-8.92-0.64-12.84-1.92-7.32-3.24-10.2-5.88-5.12-5.98-6.72-10.02-2.4-8.82-2.4-14.34c0-4.96 0.66-9.42 1.98-13.38s3.22-7.32 5.7-10.08 5.44-4.9 8.88-6.42 7.32-2.28 11.64-2.28c5.76 0 10.52 0.88 14.28 2.64s6.72 4.16 8.88 7.2 3.66 6.54 4.5 10.5 1.26 8.18 1.26 12.66zm-29.4-22.8c-2.16 0.16-4.16 0.72-6 1.68s-3.42 2.2-4.74 3.72-2.36 3.28-3.12 5.28-1.14 4.12-1.14 6.36h33.12c0-2-0.22-4.06-0.66-6.18s-1.3-4.02-2.58-5.7-3.1-3.02-5.46-4.02-5.5-1.38-9.42-1.14z" fill-rule="nonzero"/> </g> <g transform="matrix(1.008 0 0 1.008 -2.239 .61874)"> <path d="m858.57 97.21c0.64 0.48 0.96 1.16 0.96 2.04v74.88c-0.08 1.04-0.12 2.12-0.12 3.24-1.84-1.52-3.56-2.92-5.16-4.2-1.36-1.12-2.66-2.18-3.9-3.18s-2.06-1.66-2.46-1.98c-1.76 2.48-4.26 4.44-7.5 5.88s-7.02 2.16-11.34 2.16c-3.84 0-7.4-0.7-10.68-2.1s-6.14-3.44-8.58-6.12-4.34-5.94-5.7-9.78-2.04-8.16-2.04-12.96c0-4.32 0.78-8.34 2.34-12.06s3.6-6.92 6.12-9.6 5.38-4.78 8.58-6.3 6.48-2.28 9.84-2.28c2.56 0 4.82 0.22 6.78 0.66s3.68 1.06 5.16 1.86 2.78 1.74 3.9 2.82 2.16 2.22 3.12 3.42v-35.04l10.68 8.64zm-27.96 67.92c3.6 0 6.52-0.68 8.76-2.04s3.98-3.06 5.22-5.1 2.1-4.22 2.58-6.54 0.72-4.44 0.72-6.36v-1.2c0-1.12-0.22-2.7-0.66-4.74s-1.28-4.06-2.52-6.06-3-3.7-5.28-5.1-5.22-2.02-8.82-1.86c-3.44 0-6.26 0.74-8.46 2.22s-3.96 3.26-5.28 5.34-2.24 4.2-2.76 6.36-0.78 3.92-0.78 5.28c0 1.84 0.24 3.92 0.72 6.24s1.36 4.48 2.64 6.48 3.04 3.68 5.28 5.04 5.12 2.04 8.64 2.04z" fill-rule="nonzero"/> </g> <g transform="matrix(1.008 0 0 1.008 -2.239 .61874)"> <path d="m882.81 97.09c0.64 0.48 0.96 1.12 0.96 1.92l-0.12 41.04v37.08l-10.56-8.4c-0.72-0.64-1.08-1.44-1.08-2.4v-77.88l10.8 8.64z" fill-rule="nonzero"/> </g> <g transform="matrix(1.008 0 0 1.008 -2.239 .61874)"> <path d="m950.36 146.05c0 0.88 0.02 1.5 0.06 1.86s-0.02 0.98-0.18 1.86h-7.08c-2.08 0-4.44-0.02-7.08-0.06s-5.36-0.06-8.16-0.06h-22.08c0 2.88 0.56 5.36 1.68 7.44s2.6 3.8 4.44 5.16 3.94 2.36 6.3 3 4.74 0.96 7.14 0.96c3.04 0 5.9-0.76 8.58-2.28s4.94-3.52 6.78-6c0.64 0.56 1.54 1.48 2.7 2.76s2.94 3.2 5.34 5.76c-2.8 3.36-6.22 6.02-10.26 7.98s-8.42 2.94-13.14 2.94-8.92-0.64-12.84-1.92-7.32-3.24-10.2-5.88-5.12-5.98-6.72-10.02-2.4-8.82-2.4-14.34c0-4.96 0.66-9.42 1.98-13.38s3.22-7.32 5.7-10.08 5.44-4.9 8.88-6.42 7.32-2.28 11.64-2.28c5.76 0 10.52 0.88 14.28 2.64s6.72 4.16 8.88 7.2 3.66 6.54 4.5 10.5 1.26 8.18 1.26 12.66zm-29.4-22.8c-2.16 0.16-4.16 0.72-6 1.68s-3.42 2.2-4.74 3.72-2.36 3.28-3.12 5.28-1.14 4.12-1.14 6.36h33.12c0-2-0.22-4.06-0.66-6.18s-1.3-4.02-2.58-5.7-3.1-3.02-5.46-4.02-5.5-1.38-9.42-1.14z" fill-rule="nonzero"/> </g> <g transform="matrix(1.8559 0 0 .7642 45.348 36.475)"> <g transform="translate(2.7114)"> <path d="m3.935 173.02c-0.331 0-0.497-0.402-0.497-1.207v-51.002c0-0.738 0.138-1.107 0.414-1.107h1.781c0.277 0 0.415 0.335 0.415 1.006v5.935c0 0.336 0.027 0.553 0.083 0.654 0.055 0.101 0.151-0.017 0.289-0.352 0.912-1.744 1.754-3.236 2.527-4.477 0.773-1.24 1.554-2.179 2.341-2.816s1.65-0.956 2.588-0.956c1.685 0 3.011 0.922 3.977 2.766 0.967 1.845 1.602 3.84 1.905 5.986 0.056 0.268 0.139 0.369 0.249 0.302s0.221-0.235 0.331-0.503c0.939-1.811 1.802-3.353 2.589-4.628 0.787-1.274 1.581-2.246 2.382-2.917s1.671-1.006 2.61-1.006c2.016 0 3.569 1.392 4.66 4.175 1.09 2.783 1.636 6.421 1.636 10.915v37.925c0 0.871-0.18 1.307-0.539 1.307h-1.739c-0.138 0-0.249-0.1-0.332-0.301-0.083-0.202-0.124-0.503-0.124-0.906v-36.315c0-3.555-0.338-6.321-1.015-8.3-0.676-1.978-1.76-2.967-3.251-2.967-0.884 0-1.726 0.386-2.527 1.157s-1.519 1.727-2.154 2.867-1.201 2.213-1.699 3.219c-0.248 0.469-0.421 0.905-0.517 1.308-0.097 0.402-0.145 0.972-0.145 1.71v37.221c0 0.871-0.166 1.307-0.497 1.307h-1.74c-0.166 0-0.29-0.1-0.373-0.301-0.083-0.202-0.124-0.503-0.124-0.906v-36.315c0-3.555-0.332-6.321-0.994-8.3-0.663-1.978-1.754-2.967-3.273-2.967-1.242 0-2.375 0.704-3.396 2.112-1.022 1.409-2.223 3.555-3.604 6.439v39.031c0 0.805-0.18 1.207-0.539 1.207h-1.698z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> <g transform="translate(2.7114)"> <path d="m53.642 166.28c-1.077 2.549-2.237 4.477-3.479 5.785-1.243 1.307-2.61 1.961-4.101 1.961-2.154 0-3.853-1.324-5.095-3.973-1.243-2.649-1.864-6.187-1.864-10.613 0-3.488 0.4-6.489 1.201-9.004s1.988-4.51 3.562-5.985c1.574-1.476 3.521-2.414 5.841-2.817l3.686-0.704c0.221-0.067 0.394-0.218 0.518-0.453 0.124-0.234 0.187-0.587 0.187-1.056v-2.917c0-3.89-0.504-6.975-1.512-9.255s-2.354-3.42-4.039-3.42c-1.298 0-2.472 0.72-3.521 2.162s-2.002 3.572-2.858 6.388c-0.083 0.268-0.159 0.453-0.228 0.554-0.069 0.1-0.172 0.083-0.311-0.051l-1.698-1.71c-0.083-0.134-0.138-0.285-0.166-0.453-0.027-0.167 0.014-0.452 0.125-0.855 0.856-3.353 2.009-6.052 3.459-8.098 1.449-2.045 3.224-3.068 5.322-3.068 1.74 0 3.211 0.687 4.412 2.062s2.112 3.37 2.734 5.986c0.621 2.615 0.932 5.7 0.932 9.255v35.712c0 0.536-0.035 0.888-0.104 1.056s-0.2 0.251-0.393 0.251h-1.533c-0.166 0-0.29-0.117-0.373-0.352-0.083-0.234-0.124-0.553-0.124-0.955l-0.083-5.231c-0.055-0.939-0.221-1.006-0.497-0.202zm0.456-19.314c0-1.14-0.194-1.643-0.58-1.509l-3.107 0.603c-1.436 0.202-2.686 0.638-3.749 1.308-1.063 0.671-1.953 1.543-2.671 2.616s-1.257 2.33-1.616 3.772-0.538 3.102-0.538 4.98c0 3.152 0.455 5.616 1.367 7.393 0.911 1.778 2.14 2.666 3.686 2.666 0.939 0 1.85-0.419 2.734-1.257s1.671-1.895 2.361-3.169c0.663-1.408 1.181-2.85 1.553-4.326 0.373-1.475 0.56-2.883 0.56-4.225v-8.852z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> <g transform="translate(2.7114)"> <path d="m79.034 173.02c-0.166 0-0.297-0.117-0.394-0.352-0.096-0.234-0.145-0.553-0.145-0.955v-4.628c0-0.536-0.041-0.838-0.124-0.905s-0.207 0.1-0.373 0.503c-0.276 0.67-0.69 1.593-1.242 2.766-0.553 1.174-1.271 2.23-2.154 3.169-0.884 0.939-1.961 1.408-3.231 1.408-1.74 0-3.314-0.989-4.722-2.967-1.409-1.979-2.534-4.963-3.376-8.953-0.843-3.991-1.264-8.937-1.264-14.838 0-5.701 0.415-10.68 1.243-14.939s1.988-7.595 3.479-10.009c1.492-2.415 3.204-3.622 5.137-3.622 1.436 0 2.616 0.57 3.541 1.71 0.926 1.14 1.719 2.381 2.382 3.722 0.249 0.47 0.414 0.637 0.497 0.503s0.125-0.536 0.125-1.207v-23.841c0-0.805 0.151-1.208 0.455-1.208h1.864c0.276 0 0.414 0.369 0.414 1.107v72.128c0 0.537-0.041 0.905-0.124 1.107-0.083 0.201-0.235 0.301-0.455 0.301h-1.533zm-0.621-42.049c-0.939-2.213-1.885-3.94-2.838-5.181s-2.009-1.861-3.169-1.861c-1.463 0-2.768 0.889-3.914 2.666s-2.044 4.376-2.693 7.796-0.973 7.578-0.973 12.474c0 5.097 0.338 9.272 1.015 12.524 0.676 3.253 1.567 5.651 2.672 7.193 1.104 1.543 2.305 2.314 3.603 2.314 1.188 0 2.258-0.704 3.211-2.113 0.952-1.408 1.705-3.118 2.257-5.13s0.829-3.957 0.829-5.835v-24.847z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> <g transform="translate(2.7114)"> <path d="m89.514 149.38c0 3.42 0.345 6.606 1.035 9.557 0.691 2.951 1.609 5.315 2.755 7.092s2.437 2.666 3.873 2.666c1.519 0 2.837-0.738 3.956-2.213 1.118-1.476 2.064-3.655 2.837-6.539 0.083-0.336 0.166-0.52 0.249-0.554 0.083-0.033 0.179 0.017 0.29 0.151l1.408 1.912c0.221 0.268 0.235 0.67 0.041 1.207-0.69 2.548-1.47 4.661-2.34 6.337-0.87 1.677-1.857 2.935-2.962 3.773-1.104 0.838-2.319 1.257-3.645 1.257-2.043 0-3.838-1.14-5.385-3.42-1.546-2.28-2.761-5.482-3.645-9.607-0.884-4.124-1.325-8.836-1.325-14.134 0-5.901 0.455-10.931 1.367-15.089 0.911-4.158 2.14-7.377 3.686-9.658 1.547-2.28 3.3-3.42 5.261-3.42 1.988 0 3.714 1.073 5.178 3.219 1.463 2.146 2.595 5.231 3.396 9.255s1.201 8.886 1.201 14.587c0 0.469-0.02 0.939-0.062 1.408-0.041 0.469-0.214 0.704-0.517 0.704h-16.362c-0.083 0-0.152 0.151-0.207 0.453-0.056 0.302-0.083 0.654-0.083 1.056zm13.752-6.237c0.304 0 0.497-0.1 0.58-0.302 0.083-0.201 0.124-0.57 0.124-1.106 0-3.219-0.283-6.187-0.849-8.903s-1.367-4.896-2.402-6.539c-1.036-1.643-2.272-2.464-3.708-2.464-1.629 0-2.996 0.955-4.101 2.867-1.104 1.911-1.94 4.342-2.506 7.293s-0.849 6.002-0.849 9.154h13.711z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> <g transform="translate(2.7114)"> <path d="m148.54 119.7c0.165 0 0.283 0.117 0.352 0.352s0.076 0.52 0.02 0.855l-6.254 50.902c-0.028 0.47-0.104 0.788-0.228 0.956s-0.297 0.251-0.518 0.251h-1.615c-0.442 0-0.718-0.402-0.829-1.207l-5.26-40.138c-0.111-0.604-0.201-0.905-0.27-0.905s-0.131 0.301-0.186 0.905l-5.012 40.138c-0.028 0.47-0.097 0.788-0.207 0.956-0.111 0.168-0.277 0.251-0.497 0.251h-1.74c-0.442 0-0.718-0.402-0.829-1.207l-6.503-50.801c-0.055-0.403-0.048-0.721 0.021-0.956s0.2-0.352 0.393-0.352h1.823c0.166 0 0.297 0.067 0.393 0.201 0.097 0.134 0.159 0.403 0.187 0.805l5.302 41.848c0.083 0.671 0.179 0.989 0.29 0.956 0.11-0.034 0.207-0.386 0.29-1.056l5.219-41.949c0.055-0.268 0.124-0.47 0.207-0.604s0.193-0.201 0.331-0.201h1.533c0.138 0 0.262 0.067 0.373 0.201 0.11 0.134 0.179 0.403 0.207 0.805l5.468 41.848c0.083 0.671 0.179 0.989 0.29 0.956 0.11-0.034 0.207-0.386 0.29-1.056l5.053-41.849c0.055-0.335 0.138-0.57 0.249-0.704 0.11-0.134 0.234-0.201 0.373-0.201h1.284z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> <g transform="translate(2.7114)"> <path d="m156.49 171.51c0 0.604-0.042 1.006-0.125 1.208-0.082 0.201-0.262 0.301-0.538 0.301h-1.533c-0.221 0-0.366-0.083-0.435-0.251s-0.103-0.486-0.103-0.956v-50.902c0-0.805 0.152-1.207 0.456-1.207h1.822c0.304 0 0.456 0.402 0.456 1.207v50.6zm0.165-63.979c0 1.207-0.207 1.811-0.621 1.811h-1.905c-0.221 0-0.366-0.135-0.435-0.403s-0.104-0.67-0.104-1.207v-7.847c0-1.006 0.18-1.509 0.539-1.509h1.988c0.359 0 0.538 0.47 0.538 1.409v7.746z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> <g transform="translate(2.7114)"> <path d="m168.3 124.83c-0.221 0-0.331 0.269-0.331 0.805v33.801c0 3.42 0.221 5.667 0.663 6.74 0.441 1.073 1.09 1.609 1.946 1.609h3.024c0.138 0 0.242 0.084 0.311 0.252 0.069 0.167 0.103 0.419 0.103 0.754v2.716c0 0.537-0.138 0.906-0.414 1.107-0.248 0.067-0.614 0.134-1.098 0.201-0.483 0.067-0.959 0.118-1.429 0.151-0.469 0.034-0.828 0.05-1.077 0.05-1.712 0-2.934-0.955-3.665-2.867-0.732-1.911-1.098-5.013-1.098-9.305v-35.108c0-0.604-0.124-0.906-0.373-0.906h-3.521c-0.248 0-0.373-0.268-0.373-0.804v-3.521c0-0.537 0.111-0.805 0.332-0.805h3.686c0.166 0 0.263-0.268 0.29-0.805l0.415-16.095c0-0.805 0.124-1.207 0.372-1.207h1.492c0.303 0 0.455 0.436 0.455 1.307v15.995c0 0.537 0.097 0.805 0.29 0.805h5.468c0.221 0 0.331 0.268 0.331 0.805v3.521c0 0.536-0.124 0.804-0.373 0.804h-5.426z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> <g transform="translate(2.7114)"> <path d="m179.4 173.02c-0.331 0-0.497-0.402-0.497-1.207v-72.329c0-0.738 0.138-1.107 0.414-1.107h1.782c0.276 0 0.414 0.336 0.414 1.006v27.162c0 0.335 0.034 0.536 0.103 0.603s0.159-0.033 0.27-0.302c0.994-1.81 1.898-3.319 2.713-4.526 0.814-1.208 1.629-2.113 2.444-2.717 0.814-0.603 1.691-0.905 2.63-0.905 2.182 0 3.839 1.375 4.971 4.125 1.132 2.749 1.698 6.404 1.698 10.965v37.925c0 0.871-0.166 1.307-0.497 1.307h-1.74c-0.165 0-0.29-0.1-0.373-0.301-0.082-0.202-0.124-0.503-0.124-0.906v-36.315c0-3.555-0.366-6.321-1.097-8.3-0.732-1.978-1.899-2.967-3.501-2.967-0.883 0-1.705 0.318-2.464 0.956-0.76 0.637-1.526 1.576-2.299 2.816-0.773 1.241-1.643 2.834-2.61 4.779v39.031c0 0.805-0.179 1.207-0.538 1.207h-1.699z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> </g> <g transform="matrix(.80638 0 0 .80638 452.53 65.421)" fill-rule="nonzero"> <path d="m79.32 36.98v150.76l15.68-13.2 6.59-156.31-22.27 18.75z" fill="url(#f)"/> <path d="m79.32 36.98-22.27-18.75 6.59 156.31 15.68 13.2v-150.76z" fill="url(#e)"/> <path d="m25.19 104.83 8.63 49.04 12.5-14.95-2.46-56.42-18.67 22.33z" fill="url(#d)"/> <path d="m25.19 104.83-25.19-14.59 16.97 53.86 16.85 9.77-8.63-49.04z" fill="url(#c)"/> <path d="M43.86,82.5L18.69,67.98L0,90.24L25.18,104.83L43.86,82.5Z" fill="#9c3"/> <path d="m134.82 78.69-9.97 56.5 15.58-9.04 19.57-62.05-25.18 14.59z" fill="url(#b)"/> <path d="m134.82 78.69-18.68-22.33-2.86 65 11.57 13.83 9.97-56.5z" fill="url(#a)"/> <path d="m160 64.1-18.69-22.26-25.17 14.52 18.67 22.33 25.19-14.59z" fill="#ffe113"/> <path d="M101.59,18.23L79.32,0L57.05,18.23L79.32,36.98L101.59,18.23Z" fill="#f3e600"/> </g> <defs> <linearGradient id="f" x2="1" gradientTransform="matrix(.84 -162.96 162.96 .84 89.64 184.81)" gradientUnits="userSpaceOnUse"><stop stop-color="#62d399" offset="0"/><stop stop-color="#acd842" offset=".51"/><stop stop-color="#d7db0a" offset=".9"/><stop stop-color="#d7db0a" offset="1"/></linearGradient> <linearGradient id="e" x2="1" gradientTransform="matrix(-1.6,-162.13,162.13,-1.6,69.68,178.9)" gradientUnits="userSpaceOnUse"><stop stop-color="#0ba398" offset="0"/><stop stop-color="#4ca352" offset=".5"/><stop stop-color="#76a30a" offset="1"/></linearGradient> <linearGradient id="d" x2="1" gradientTransform="matrix(-1.9,-67.98,67.98,-1.9,36.6,152.17)" gradientUnits="userSpaceOnUse"><stop stop-color="#36a382" offset="0"/><stop stop-color="#36a382" offset=".19"/><stop stop-color="#49a459" offset=".54"/><stop stop-color="#76a30b" offset="1"/></linearGradient> <linearGradient id="c" x2="1" gradientTransform="matrix(2.18,-62.38,62.38,2.18,15.82,153.24)" gradientUnits="userSpaceOnUse"><stop stop-color="#267880" offset="0"/><stop stop-color="#457a5c" offset=".51"/><stop stop-color="#717516" offset="1"/></linearGradient> <linearGradient id="b" x2="1" gradientTransform="matrix(13.85,-71.96,71.96,13.85,135.08,135.43)" gradientUnits="userSpaceOnUse"><stop stop-color="#b0d939" offset="0"/><stop stop-color="#eadb04" offset="1"/></linearGradient> <linearGradient id="a" x2="1" gradientTransform="matrix(26.159 -64.737 64.737 26.159 107.42 128.14)" gradientUnits="userSpaceOnUse"><stop stop-color="#74af52" offset="0"/><stop stop-color="#74af52" offset=".17"/><stop stop-color="#99be32" offset=".48"/><stop stop-color="#c0c40a" offset="1"/></linearGradient> </defs> </svg>`; btoa(h1); const d1 = '<svg viewBox="0 0 509 154" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><path d="M665.95 132.73v44.88l-10.56-8.4c-.8-.64-1.2-1.44-1.2-2.4v-32.4c0-6.48-4.12-9.72-12.36-9.72-2.16 0-4.18.4-6.06 1.2-1.88.8-3.54 1.8-4.98 3-1.44 1.2-2.56 2.5-3.36 3.9-.8 1.4-1.2 2.7-1.2 3.9v40.92l-10.68-8.4c-.72-.64-1.08-1.44-1.08-2.4v-53.76l10.92 8.52c.32.24.56.44.72.6.16.16.36.32.6.48.96-1.2 2.14-2.28 3.54-3.24 1.4-.96 2.92-1.76 4.56-2.4 1.64-.64 3.34-1.14 5.1-1.5 1.76-.36 3.44-.54 5.04-.54 1.44 0 2.92.04 4.44.12 1.52.08 2.84.28 3.96.6 4.56 1.12 7.8 3.12 9.72 6 1.92 2.88 2.88 6.56 2.88 11.04ZM732.38 146.05c0 .88.02 1.5.06 1.86.04.36-.02.98-.18 1.86h-7.08c-2.08 0-4.44-.02-7.08-.06-2.64-.04-5.36-.06-8.16-.06h-22.08c0 2.88.56 5.36 1.68 7.44 1.12 2.08 2.6 3.8 4.44 5.16 1.84 1.36 3.94 2.36 6.3 3 2.36.64 4.74.96 7.14.96 3.04 0 5.9-.76 8.58-2.28 2.68-1.52 4.94-3.52 6.78-6 .64.56 1.54 1.48 2.7 2.76 1.16 1.28 2.94 3.2 5.34 5.76-2.8 3.36-6.22 6.02-10.26 7.98-4.04 1.96-8.42 2.94-13.14 2.94-4.72 0-8.92-.64-12.84-1.92-3.92-1.28-7.32-3.24-10.2-5.88-2.88-2.64-5.12-5.98-6.72-10.02-1.6-4.04-2.4-8.82-2.4-14.34 0-4.96.66-9.42 1.98-13.38 1.32-3.96 3.22-7.32 5.7-10.08s5.44-4.9 8.88-6.42c3.44-1.52 7.32-2.28 11.64-2.28 5.76 0 10.52.88 14.28 2.64 3.76 1.76 6.72 4.16 8.88 7.2 2.16 3.04 3.66 6.54 4.5 10.5.84 3.96 1.26 8.18 1.26 12.66Zm-29.4-22.8c-2.16.16-4.16.72-6 1.68-1.84.96-3.42 2.2-4.74 3.72-1.32 1.52-2.36 3.28-3.12 5.28-.76 2-1.14 4.12-1.14 6.36h33.12c0-2-.22-4.06-.66-6.18-.44-2.12-1.3-4.02-2.58-5.7-1.28-1.68-3.1-3.02-5.46-4.02-2.36-1-5.5-1.38-9.42-1.14ZM795.93 146.05c0 .88.02 1.5.06 1.86.04.36-.02.98-.18 1.86h-7.08c-2.08 0-4.44-.02-7.08-.06-2.64-.04-5.36-.06-8.16-.06h-22.08c0 2.88.56 5.36 1.68 7.44 1.12 2.08 2.6 3.8 4.44 5.16 1.84 1.36 3.94 2.36 6.3 3 2.36.64 4.74.96 7.14.96 3.04 0 5.9-.76 8.58-2.28 2.68-1.52 4.94-3.52 6.78-6 .64.56 1.54 1.48 2.7 2.76 1.16 1.28 2.94 3.2 5.34 5.76-2.8 3.36-6.22 6.02-10.26 7.98-4.04 1.96-8.42 2.94-13.14 2.94-4.72 0-8.92-.64-12.84-1.92-3.92-1.28-7.32-3.24-10.2-5.88-2.88-2.64-5.12-5.98-6.72-10.02-1.6-4.04-2.4-8.82-2.4-14.34 0-4.96.66-9.42 1.98-13.38 1.32-3.96 3.22-7.32 5.7-10.08s5.44-4.9 8.88-6.42c3.44-1.52 7.32-2.28 11.64-2.28 5.76 0 10.52.88 14.28 2.64 3.76 1.76 6.72 4.16 8.88 7.2 2.16 3.04 3.66 6.54 4.5 10.5.84 3.96 1.26 8.18 1.26 12.66Zm-29.4-22.8c-2.16.16-4.16.72-6 1.68-1.84.96-3.42 2.2-4.74 3.72-1.32 1.52-2.36 3.28-3.12 5.28-.76 2-1.14 4.12-1.14 6.36h33.12c0-2-.22-4.06-.66-6.18-.44-2.12-1.3-4.02-2.58-5.7-1.28-1.68-3.1-3.02-5.46-4.02-2.36-1-5.5-1.38-9.42-1.14ZM858.57 97.21c.64.48.96 1.16.96 2.04v74.88c-.08 1.04-.12 2.12-.12 3.24-1.84-1.52-3.56-2.92-5.16-4.2-1.36-1.12-2.66-2.18-3.9-3.18-1.24-1-2.06-1.66-2.46-1.98-1.76 2.48-4.26 4.44-7.5 5.88-3.24 1.44-7.02 2.16-11.34 2.16-3.84 0-7.4-.7-10.68-2.1-3.28-1.4-6.14-3.44-8.58-6.12-2.44-2.68-4.34-5.94-5.7-9.78-1.36-3.84-2.04-8.16-2.04-12.96 0-4.32.78-8.34 2.34-12.06 1.56-3.72 3.6-6.92 6.12-9.6 2.52-2.68 5.38-4.78 8.58-6.3 3.2-1.52 6.48-2.28 9.84-2.28 2.56 0 4.82.22 6.78.66 1.96.44 3.68 1.06 5.16 1.86s2.78 1.74 3.9 2.82a35.92 35.92 0 0 1 3.12 3.42V88.57l10.68 8.64Zm-27.96 67.92c3.6 0 6.52-.68 8.76-2.04 2.24-1.36 3.98-3.06 5.22-5.1a20.5 20.5 0 0 0 2.58-6.54c.48-2.32.72-4.44.72-6.36v-1.2c0-1.12-.22-2.7-.66-4.74-.44-2.04-1.28-4.06-2.52-6.06s-3-3.7-5.28-5.1c-2.28-1.4-5.22-2.02-8.82-1.86-3.44 0-6.26.74-8.46 2.22-2.2 1.48-3.96 3.26-5.28 5.34-1.32 2.08-2.24 4.2-2.76 6.36-.52 2.16-.78 3.92-.78 5.28 0 1.84.24 3.92.72 6.24.48 2.32 1.36 4.48 2.64 6.48s3.04 3.68 5.28 5.04c2.24 1.36 5.12 2.04 8.64 2.04ZM882.81 97.09c.64.48.96 1.12.96 1.92l-.12 41.04v37.08l-10.56-8.4c-.72-.64-1.08-1.44-1.08-2.4V88.45l10.8 8.64ZM950.36 146.05c0 .88.02 1.5.06 1.86.04.36-.02.98-.18 1.86h-7.08c-2.08 0-4.44-.02-7.08-.06-2.64-.04-5.36-.06-8.16-.06h-22.08c0 2.88.56 5.36 1.68 7.44 1.12 2.08 2.6 3.8 4.44 5.16 1.84 1.36 3.94 2.36 6.3 3 2.36.64 4.74.96 7.14.96 3.04 0 5.9-.76 8.58-2.28 2.68-1.52 4.94-3.52 6.78-6 .64.56 1.54 1.48 2.7 2.76 1.16 1.28 2.94 3.2 5.34 5.76-2.8 3.36-6.22 6.02-10.26 7.98-4.04 1.96-8.42 2.94-13.14 2.94-4.72 0-8.92-.64-12.84-1.92-3.92-1.28-7.32-3.24-10.2-5.88-2.88-2.64-5.12-5.98-6.72-10.02-1.6-4.04-2.4-8.82-2.4-14.34 0-4.96.66-9.42 1.98-13.38 1.32-3.96 3.22-7.32 5.7-10.08s5.44-4.9 8.88-6.42c3.44-1.52 7.32-2.28 11.64-2.28 5.76 0 10.52.88 14.28 2.64 3.76 1.76 6.72 4.16 8.88 7.2 2.16 3.04 3.66 6.54 4.5 10.5.84 3.96 1.26 8.18 1.26 12.66Zm-29.4-22.8c-2.16.16-4.16.72-6 1.68-1.84.96-3.42 2.2-4.74 3.72-1.32 1.52-2.36 3.28-3.12 5.28-.76 2-1.14 4.12-1.14 6.36h33.12c0-2-.22-4.06-.66-6.18-.44-2.12-1.3-4.02-2.58-5.7-1.28-1.68-3.1-3.02-5.46-4.02-2.36-1-5.5-1.38-9.42-1.14Z" style="fill-rule:nonzero" transform="translate(-452.406 -63.709) scale(1.00797)"/><path d="M79.32 36.98v150.76L95 174.54l6.59-156.31-22.27 18.75Z" style="fill:url(#a);fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="M79.32 36.98 57.05 18.23l6.59 156.31 15.68 13.2V36.98Z" style="fill:url(#b);fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="m25.19 104.83 8.63 49.04 12.5-14.95-2.46-56.42-18.67 22.33Z" style="fill:url(#c);fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="M25.19 104.83 0 90.24l16.97 53.86 16.85 9.77-8.63-49.04Z" style="fill:url(#d);fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="M43.86 82.5 18.69 67.98 0 90.24l25.18 14.59L43.86 82.5Z" style="fill:#9c3;fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="m134.82 78.69-9.97 56.5 15.58-9.04L160 64.1l-25.18 14.59Z" style="fill:url(#e);fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="m134.82 78.69-18.68-22.33-2.86 65 11.57 13.83 9.97-56.5Z" style="fill:url(#f);fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="m160 64.1-18.69-22.26-25.17 14.52 18.67 22.33L160 64.1Z" style="fill:#ffe113;fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="M101.59 18.23 79.32 0 57.05 18.23l22.27 18.75 22.27-18.75Z" style="fill:#f3e600;fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><defs><linearGradient id="a" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(.84 -162.96 162.96 .84 89.64 184.81)"><stop offset="0" style="stop-color:#62d399;stop-opacity:1"/><stop offset=".51" style="stop-color:#acd842;stop-opacity:1"/><stop offset=".9" style="stop-color:#d7db0a;stop-opacity:1"/><stop offset="1" style="stop-color:#d7db0a;stop-opacity:1"/></linearGradient><linearGradient id="b" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="rotate(-90.565 123.412 54.953) scale(162.14)"><stop offset="0" style="stop-color:#0ba398;stop-opacity:1"/><stop offset=".5" style="stop-color:#4ca352;stop-opacity:1"/><stop offset="1" style="stop-color:#76a30a;stop-opacity:1"/></linearGradient><linearGradient id="c" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="scale(-68) rotate(88.4 .881 -1.396)"><stop offset="0" style="stop-color:#36a382;stop-opacity:1"/><stop offset=".19" style="stop-color:#36a382;stop-opacity:1"/><stop offset=".54" style="stop-color:#49a459;stop-opacity:1"/><stop offset="1" style="stop-color:#76a30b;stop-opacity:1"/></linearGradient><linearGradient id="d" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="rotate(-88 87.255 68.431) scale(62.42)"><stop offset="0" style="stop-color:#267880;stop-opacity:1"/><stop offset=".51" style="stop-color:#457a5c;stop-opacity:1"/><stop offset="1" style="stop-color:#717516;stop-opacity:1"/></linearGradient><linearGradient id="e" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="rotate(-79.1 149.53 -14.065) scale(73.28)"><stop offset="0" style="stop-color:#b0d939;stop-opacity:1"/><stop offset="1" style="stop-color:#eadb04;stop-opacity:1"/></linearGradient><linearGradient id="f" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="rotate(-67.997 148.705 -15.558) scale(69.8226)"><stop offset="0" style="stop-color:#74af52;stop-opacity:1"/><stop offset=".17" style="stop-color:#74af52;stop-opacity:1"/><stop offset=".48" style="stop-color:#99be32;stop-opacity:1"/><stop offset="1" style="stop-color:#c0c40a;stop-opacity:1"/></linearGradient></defs></svg>', u1 = btoa(d1), f1 = "data:image/svg+xml;charset=utf-8;base64," + u1, p1 = f1, u_ = typeof window !== void 0 ? window.location.search.includes("debugcontext") : !1; var me = /* @__PURE__ */ ((o) => (o.ContextRegistered = "ContextRegistered", o.ContextCreationStart = "ContextCreationStart", o.ContextCreated = "ContextCreated", o.ContextFirstFrameRendered = "ContextFirstFrameRendered", o.ContextDestroying = "ContextDestroying", o.ContextDestroyed = "ContextDestroyed", o.MissingCamera = "MissingCamera", o.ContextClearing = "ContextClearing", o.ContextCleared = "ContextCleared", o))(me || {}); class fe { /** The currently active (rendering) Needle Engine context */ static get Current() { return globalThis["NeedleEngine.Context.Current"]; } /** @internal */ static set Current(t) { globalThis["NeedleEngine.Context.Current"] = t; } /** Returns the array of all registered Needle Engine contexts. Do not modify */ static get All() { return this.Registered; } /** @internal Internal use only */ static register(t) { this.Registered.indexOf(t) === -1 && (u_ && console.warn("Registering context"), this.Registered.push(t), this.dispatchCallback("ContextRegistered", t)); } /** @internal Internal use only */ static unregister(t) { const e = this.Registered.indexOf(t); e !== -1 && (u_ && console.warn("Unregistering context"), this.Registered.splice(e, 1)); } /** * Register a callback to be called when the given event occurs */ static registerCallback(t, e) { this._callbacks[t] || (this._callbacks[t] = []), this._callbacks[t].push(e); } /** Unregister a callback */ static unregisterCallback(t, e) { if (!this._callbacks[t]) return; const i = this._callbacks[t].indexOf(e); i !== -1 && this._callbacks[t].splice(i, 1); } /** @internal */ static dispatchCallback(t, e, i) { if (!this._callbacks[t]) return !0; const n = { event: t, context: e }; if (i) for (const a in i) n[a] = i[a]; const s = new Array(); return this._callbacks[t].forEach((a) => { const l = a(n); l instanceof Promise && s.push(l); }), Promise.all(s); } /** * Register a callback to be called when a context is created */ static addContextCreatedCallback(t) { this.registerCallback("ContextCreated", t); } /** * Register a callback to be called when a context is registered */ static addContextDestroyedCallback(t) { this.registerCallback("ContextDestroyed", t); } } /** All currently registered Needle Engine contexts. Do not modify */ r(fe, "Registered", []), r(fe, "_callbacks", {}); const m1 = () => (o) => o; function aL(o) { return m1()(o); } function lL() { return !!S("debug"); } class on { constructor(t, e) { r(this, "_factory"); r(this, "_cache", []); r(this, "_maxSize"); r(this, "_index", 0); this._factory = t, this._maxSize = e; } get() { const t = this._index % this._maxSize; return this._index++, this._cache.length <= t && (this._cache[t] = this._factory()), this._cache[t]; } } let br = !1; const dm = new Array(); typeof window < "u" && setTimeout(() => { if (br) { const o = {}, t = new URL(window.location.href), e = new URL(t); e.searchParams.append("console", ""); const i = e.toString().replace(/=$|=(?=&)/g, ""); for (const s of dm) { const a = new URL(t); a.searchParams.append(s, ""), o[s] = a.toString().replace(/=$|=(?=&)/g, ""); } console.log( `🌵 ?help: Debug Options for Needle Engine. Append any of these parameters to the URL to enable specific debug options. Example: ${i} will show an onscreen console window.` ); const n = br === !0 ? "" : ` (containing "${br}")`; console.group("Available URL parameters:" + n); for (const s of Object.keys(o).sort()) typeof br == "string" && !s.toLowerCase().includes(br.toLowerCase()) || (console.groupCollapsed(s), console.log("Reload with this flag enabled:"), console.log(o[s]), console.groupEnd()); console.groupEnd(); } }, 100); function $u() { var o; return new URLSearchParams((o = globalThis.location) == null ? void 0 : o.search); } function S(o) { br && !dm.includes(o) && dm.push(o); const t = $u(); if (t.has(o)) { const e = t.get(o); if (e) { const i = Number(e); return isNaN(i) ? e : i; } else return !0; } return !1; } br = S("help"); function cL(o, t) { const e = $u(); e.has(o) ? e.set(o, t) : e.append(o, t), document.location.search = e.toString(); } function Nd(o, t, e = !0) { const i = $u(); i.has(o) ? t === null ? i.delete(o) : i.set(o, t) : t !== null && i.append(o, t), e ? g1(o, i) : U0(o, i); } function f_(o, t, e) { o.has(t) ? o.set(t, e.toString()) : o.append(t, e.toString()); } function g1(o, t, e) { window.history.pushState(e, o, "?" + t.toString()); } function U0(o, t, e) { window.history.replaceState(e, o, "?" + t.toString()); } function hL(o) { for (var t = "", e = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", i = e.length, n = 0; n < o; n++) t += e.charAt(Math.floor(Math.random() * i)); return t; } function dL(o, t) { return Math.floor(Math.random() * (t - o + 1)) + o; } const p_ = ["smol", "tiny", "giant", "interesting", "smart", "bright", "dull", "extreme", "beautiful", "pretty", "dark", "epic", "salty", "silly", "funny", "lame", "lazy", "loud", "lucky", "mad", "mean", "mighty", "mysterious", "nasty", "odd", "old", "powerful", "quiet", "rapid", "scary", "shiny", "shy", "silly", "smooth", "sour", "spicy", "stupid", "sweet", "tasty", "terrible", "ugly", "unusual", "vast", "wet", "wild", "witty", "wrong", "zany", "zealous", "zippy", "zombie", "zorro"], m_ = ["cat", "dog", "mouse", "pig", "cow", "horse", "sheep", "chicken", "duck", "goat", "panda", "tiger", "lion", "elephant", "monkey", "bird", "fish", "snake", "frog", "turtle", "hamster", "penguin", "kangaroo", "whale", "dolphin", "crocodile", "snail", "ant", "bee", "beetle", "butterfly", "dragon", "eagle", "fish", "giraffe", "lizard", "panda", "penguin", "rabbit", "snake", "spider", "tiger", "zebra"]; function y1() { const o = p_[Math.floor(Math.random() * p_.length)], t = m_[Math.floor(Math.random() * m_.length)]; return o + "_" + t; } function _1(o) { return o = o.replace(/[^a-z0-9áéíóúñü \.,_-]/gim, ""), o.trim(); } function Wc(o, t, e = !0, i = !1) { var n; if (t == null) return null; if (t.userData && t.userData.guid === o) return t; if (t.guid == o) return t; if (i && (n = t.userData) != null && n.components) { for (const s of t.userData.components) if (s.guid === o) return s; } if (e) { if (t.scenes) for (const s in t.scenes) { const a = t.scenes[s], l = Wc(o, a, e, i); if (l) return l; } if (t.children) for (const s in t.children) { const a = t.children[s], l = Wc(o, a, e, i); if (l) return l; } } } function Wu(o, t) { if (o != null && typeof o == "object") { let e; Array.isArray(o) ? e = [] : (e = Object.create(o), Object.assign(e, o)); for (const i of Object.keys(o)) { const n = o[i]; t && !t(o, i, n) ? e[i] = n : (n == null ? void 0 : n.clone) !== void 0 && typeof n.clone == "function" ? e[i] = n.clone() : e[i] = Wu(n, t); } return e; } return o; } function os(o) { return new Promise((t, e) => { setTimeout(t, o); }); } function Vu(o, t) { if (o <= 0) return Promise.resolve(); if (t || (t = fe.Current), !t) return Promise.reject("No context"); const e = t.time.frameCount + o; return new Promise((i, n) => { if (!t) return n("No context"); const s = () => { t.time.frameCount >= e && (t.pre_update_callbacks.splice(t.pre_update_callbacks.indexOf(s), 1), i()); }; t.pre_update_callbacks.push(s); }); } const zh = S("debugresolveurl"), b1 = "rel:"; function uL(o, t) { return Jr(o, t); } function Jr(o, t) { if (t === void 0) return zh && console.warn("getPath: uri is undefined, returning uri", t), t; if (t.startsWith("./")) return t; if (t.startsWith("http")) return zh && console.warn("getPath: uri is absolute, returning uri", t), t; if (o === void 0) return zh && console.warn("getPath: source is undefined, returning uri", t), t; t.startsWith(b1) && (t = t.substring(4)); const e = o.lastIndexOf("/"); if (e >= 0) { const i = o.substring(0, e + 1); for (; i.endsWith("/") && t.startsWith("/"); ) t = t.substring(1); const n = i + t; return zh && console.log("source:", o, `changed uri from`, t, ` to `, n, ` basePath: ` + i), n; } return t; } class v1 { constructor(t, e) { r(this, "writeCallbacks", []); r(this, "_applied", !1); r(this, "_object"); r(this, "_prop"); r(this, "_wrapperProp"); this._object = t, this._prop = e, this._wrapperProp = Symbol("$" + e), this.apply(); } subscribeWrite(t) { this.writeCallbacks.push(t); } unsubscribeWrite(t) { const e = this.writeCallbacks.indexOf(t); e !== -1 && this.writeCallbacks.splice(e, 1); } apply() { if (this._applied || !this._object) return; const t = this._object, e = this._prop; if (t[e] === void 0) return; this._applied = !0, t[this._wrapperProp] !== void 0 && console.warn("Watcher is being applied to an object that already has a wrapper property. This is not (yet) supported"); const i = t[e]; t[this._wrapperProp] = i, Object.defineProperty(t, e, { get: () => t[this._wrapperProp], set: (a) => { t[this._wrapperProp] = a; for (const l of this.writeCallbacks) l(a, this._prop); } }); } revoke() { if (!this._applied || !this._object) return; this._applied = !1; const t = this._object, e = this._prop; Reflect.deleteProperty(t, e); const i = t[this._wrapperProp]; t[e] = i, Reflect.deleteProperty(t, this._wrapperProp); } dispose() { this.revoke(), this.writeCallbacks.length = 0, this._object = null; } } class Fo { constructor(t, e) { r(this, "_watches", []); if (Array.isArray(e)) for (const i of e) this._watches.push(new Fo(t, i)); else this._watches.push(new v1(t, e)); } subscribeWrite(t) { for (const e of this._watches) e.subscribeWrite(t); } unsubscribeWrite(t) { for (const e of this._watches) e.unsubscribeWrite(t); } apply() { for (const t of this._watches) t.apply(); } revoke() { for (const t of this._watches) t.revoke(); } dispose() { for (const t of this._watches) t.dispose(); this._watches.length = 0; } } const Sa = Symbol("needle:watches"); function kg(o, t) { if (!o[Sa]) if (o instanceof ae) o[Sa] = new Fo(o, ["x", "y"]); else if (o instanceof w) o[Sa] = new Fo(o, ["x", "y", "z"]); else if (o instanceof ye || o instanceof W) o[Sa] = new Fo(o, ["x", "y", "z", "w"]); else return !1; return o[Sa].subscribeWrite(t), !0; } function N0(o, t) { if (!o) return; const e = o[Sa]; e && e.unsubscribeWrite(t); } var Q; ((o) => { let t; function e() { if (t !== void 0) return t; const B = window.navigator.userAgent, V = /Windows|MacOS|Mac OS/.test(B), J = /Windows NT/.test(B) && /Edg/.test(B) && !/Win64/.test(B); return t = V && !J && !v(); } o.isDesktop = e; let i; function n() { return i !== void 0 ? i : typeof window.orientation < "u" || navigator.userAgent.indexOf("IEMobile") !== -1 ? i = !0 : i = /iPhone|iPad|iPod|Android|IEMobile/i.test(navigator.userAgent); } o.isMobileDevice = n; function s() { return l(); } o.isIPad = s; let a; function l() { return a !== void 0 ? a : a = /iPad/.test(navigator.userAgent); } o.isiPad = l; let c; function h() { return c !== void 0 ? c : c = /Android/.test(navigator.userAgent); } o.isAndroidDevice = h; let d; function u() { return d !== void 0 ? d : d = /WebXRViewer\//i.test(navigator.userAgent); } o.isMozillaXR = u; let f; function m() { if (f !== void 0) return f; if (navigator.userAgentData) return f = navigator.userAgentData.platform === "macOS"; { const B = navigator.userAgent.toLowerCase(); return f = B.includes("mac os x") || B.includes("macintosh"); } } o.isMacOS = m; let g; function _() { return g !== void 0 ? g : g = m() && "xr" in navigator; } o.isVisionOS = _; let y; const b = ["iPad Simulator", "iPhone Simulator", "iPod Simulator", "iPad", "iPhone", "iPod"]; function v() { return y !== void 0 ? y : y = b.includes(navigator.platform) || navigator.userAgent.includes("Mac") && "ontouchend" in document; } o.isiOS = v; let x; function k() { return x !== void 0 || (x = /^((?!chrome|android).)*safari/i.test(navigator.userAgent)), x; } o.isSafari = k; let O; function R() { return O !== void 0 ? O : O = navigator.userAgent.includes("OculusBrowser"); } o.isQuest = R; let T; function U() { return T !== void 0 || (T = document.createElement("a").relList.supports("ar")), T; } o.supportsQuickLookAR = U; async function E() { try { return (await navigator.permissions.query({ name: "microphone" })).state !== "denied"; } catch (B) { return console.error("Error querying `microphone` permissions.", B), !1; } } o.microphonePermissionsGranted = E; let I; function A() { if (I !== void 0) return I; const B = navigator.userAgent.match(/iPhone OS (\d+_\d+)/); if (B && (I = B[1].replace("_", ".")), !I) { const V = navigator.userAgent.match(/(?:\(Macintosh;|iPhone;|iPad;).*Version\/(\d+\.\d+)/); V && (I = V[1]); } return I || (I = null), I; } o.getiOSVersion = A; let Y; function F() { if (Y !== void 0) return Y; const B = navigator.userAgent.match(/(?:CriOS|Chrome)\/(\d+\.\d+\.\d+\.\d+)/); return B ? Y = B[1].replace("_", ".") : Y = null, Y; } o.getChromeVersion = F; })(Q || (Q = {})); function fL() { return Q.isDesktop(); } function pL() { return Q.isMobileDevice(); } function mL() { return Q.isiPad(); } function gL() { return Q.isiPad(); } function yL() { return Q.isAndroidDevice(); } function _L() { return Q.isMozillaXR(); } function bL() { return Q.isMacOS(); } function vL() { return Q.isiOS(); } function wL() { return Q.isSafari(); } function xL() { return Q.isQuest(); } async function SL() { return Q.microphonePermissionsGranted(); } const Ao = /* @__PURE__ */ new WeakMap(); function w1(o, t, e) { if (!Ao.get(o)) { const n = new MutationObserver((s) => { S1(o, s); }); Ao.set(o, { observer: n, attributeChangedListeners: /* @__PURE__ */ new Map() }), n.observe(o, { attributes: !0 }); } const i = Ao.get(o).attributeChangedListeners; i.has(t) || i.set(t, []), i.get(t).push(e); } function x1(o, t, e) { if (!Ao.get(o)) return; const i = Ao.get(o).attributeChangedListeners; if (!i.has(t)) return; const n = i.get(t), s = n.indexOf(e); if (s !== -1 && (n.splice(s, 1), n.length <= 0)) { i.delete(t); const a = Ao.get(o); a == null || a.observer.disconnect(), Ao.delete(o); } } function S1(o, t) { const e = Ao.get(o).attributeChangedListeners; for (const i of t) if (i.type === "attributes") { const n = i.attributeName, s = o.getAttribute(n); if (e.has(n)) for (const a of e.get(n)) a(s); } } class g_ { constructor(t) { r(this, "reason"); this.reason = t; } } async function $0(o) { const t = await Promise.allSettled(o).catch((n) => [ new g_(n.message) ]); let e = !1; const i = t.map((n) => "value" in n ? n.value : (e = !0, new g_(n.reason))); return { anyFailed: e, results: i }; } async function C1(o) { var c; if (!globalThis.QRCode) { const h = "https://cdn.jsdelivr.net/gh/davidshimjs/qrcodejs@gh-pages/qrcode.min.js"; let d = document.head.querySelector(`script[src="${h}"]`); d || (d = document.createElement("script"), d.src = h, document.head.appendChild(d)), await new Promise((u, f) => { d.addEventListener("load", () => { u(!0); }); }); } const t = globalThis.QRCode, e = o.domElement ?? document.createElement("div"), i = new t(e, { width: o.width ?? 256, height: o.height ?? 256, colorDark: "#000000", colorLight: "#ffffff", correctLevel: o.showLogo ? t.CorrectionLevel.H : t.CorrectLevel.M, ...o }), n = (i == null ? void 0 : i._oQRCode.moduleCount) || 0, s = (c = i == null ? void 0 : i._oDrawing) == null ? void 0 : c._elCanvas; let a = 0.25; n < 40 ? a = Math.floor(n / 4) / n : a = Math.floor(n / 6) / n; const l = Math.floor(n / 20) / n; try { const h = await P1(s, { showLogo: o.showLogo, logoSize: a, logoPadding: l }).catch((d) => { }); h && (e.innerHTML = "", e.append(h)); } catch { } if (o.showUrl !== !1 && o.text) { const h = e.querySelector(".qr-code-link-label"); let d = o.text.replace(/^(https?:\/\/)?(www\.)?/, "").replace(/\/+$/, "").replace(/\?+$/, ""); if (d = "Scan to visit " + d, h) h.textContent = d; else { const u = document.createElement("div"); u.classList.add("qr-code-link-label"), o.text = d, u.textContent = o.text, u.addEventListener("click", (f) => { f.stopImmediatePropagation(); }), u.style.textAlign = "center", u.style.fontSize = "0.8em", u.style.marginTop = "0.1em", u.style.color = "#000000", u.